Hibernate:映射中的重复列

时间:2017-02-06 19:25:04

标签: java sql hibernate mapping

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

我有以下类设置来尝试按iddepartment分隔函数

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的同时提供这些字段,这可能吗?

1 个答案:

答案 0 :(得分:1)

您应该删除@Column private String workerId;,因为您已经按照与WorkerDto的关系进行了映射。

如果您想创建关系,请在setWorkerDto中使用AttendencetDto方法,然后保存。交易结束后,您将在DB中拥有您的关系。