gpt4 book ai didi

java - Hibernate:映射中的重复列

转载 作者:行者123 更新时间:2023-12-01 08:55:10 25 4
gpt4 key购买 nike

因此,在这个示例场景中,我有一个出勤 DTO 和一个工作人员 DTO,在这种情况下,工作人员按部门分开,并且工作人员只能在一个部门内。需要注意的是Worker {id='123-123-123', department='a'}Worker {id='123-123-123', department='b'} 不同,尽管它们共享相同的 ID。

我有以下类设置来尝试按 id 分隔函数和department

public class IdAndDepartmentPK implements Serializable {

private String id;
private String department;

public IdAndDepartmentPK() {}
...
}

此 key 类在需要 Worker 的 DTO 之间共享的iddepartment ,下面是导致问题的两个 DTO。

@Entity
@IdClass(IdAndDepartmentPK.class)
public class AttendencetDto {

@Id private String id; // This is a departmentally unique attendenceId
@Id private String department;
@Column private String workerId;

@JoinColumns({
@JoinColumn(name = "workerId"),
@JoinColumn(name = "department")
})
@ManyToOne(fetch = FetchType.EAGER)
private WorkerDto workerDto;
....
}

@Entity
@IdClass(IdAndDepartmentPK.class)
public class WorkerDto {

@Id
private String id;

@Id
private String department;
...
}

WorkerDto不需要了解AttendencetDto ,但是AttendencetDto ,确实需要访问 WorkerDto及其包含的其他数据。

Hibernate 提示像 workerId 这样的字段应该使用 insert="false"update="false"进行映射,但是如果我这样做,那么我将无法将这些值保存到数据库中。

我本质上希望这些字段可用,同时也具有 WorkerDto可用,这可能吗?

最佳答案

您应该删除 @Column private String workerId;,因为您已经通过与 WorkerDto 的关系将其映射。

如果您想在它们之间创建关系,您应该在 AttendencetDto 中使用 setWorkerDto 方法并保存。交易结束后,您将在数据库中拥有您的关系。

关于java - Hibernate:映射中的重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42075701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com