【发布时间】:2017-06-23 20:41:23
【问题描述】:
所以在这个示例场景中,我有一个出勤 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() {}
...
}
此密钥类在需要Worker 的id 和department 的DTO 之间共享,以下是导致问题的两个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 链接您的实体。
-
但是,如果我有表
attendence,例如,列worker_id,是否会在没有我在dto中指定该列的情况下休眠插入数据? -
如果有外键连接,你可以设置
workerDto,交易关闭后你的实体将被链接。 -
实际上,您是对的,它按预期工作。干杯老兄。
-
请标记我的答案:)
标签: java sql hibernate mapping