因此,在此示例场景中,我有一个出勤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
的{{1}}和id
的DTO之间共享,以下是导致问题的两个DTO。
department
@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
及其中包含的其他数据。
Hibernate抱怨像WorkerDto
这样的字段应该用insert =“false”update =“false”映射,但如果我这样做,那么我就无法将这些值保存到数据库中。
我基本上希望在提供workerId
的同时提供这些字段,这可能吗?
答案 0 :(得分:1)
您应该删除@Column private String workerId;
,因为您已经按照与WorkerDto
的关系进行了映射。
如果您想创建关系,请在setWorkerDto
中使用AttendencetDto
方法,然后保存。交易结束后,您将在DB中拥有您的关系。