簡體   English   中英

復合主鍵和多對一休眠

[英]Composite primary key and ManyToOne hibernate

我正在學習 Hibernate,並且正在嘗試使映射工作。 我的實體如下

部門:

@Entity
public class Department {

    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String hqLocation;
    // getters and setters omitted for brevity 
}

工人編號:

@Embeddable
public class WorkerId implements Serializable {

    private Integer workerId;
    private Integer deptId;
    // getters and setters omitted for brevity 
}

工人:

@Entity
public class Worker {

    @EmbeddedId
    private WorkerId id;
    private String name;
    private Integer age;

    // How to make @ManyToOne mapping work?
    private Department department;
    // getters and setters omitted for brevity 
}

問題:如何使@ManyToOne on field private Department department; 工作? 只需添加注釋結果private Department department; 作為null

真正的問題是,哪個實體應該是關系的所有者? 你想映射雙向還是單向?

這是雙向示例

@OneToMany(
      fetch = FetchType.EAGER,
      mappedBy = "department",
      orphanRemoval = true,
      cascade = CascadeType.ALL)
private List<Worker> workers;


@JoinColumn(name = "department_id", nullable = false)
@ManyToOne(targetEntity = Department.class, fetch = FetchType.LAZY)
private Department department;

獲取類型是可選的,取決於用例

我認為您想使用“派生身份”; 所以你應該像這樣制作Worker.department

@Entity
public class Worker {

    @EmbeddedId
    private WorkerId id;
    private String name;
    private Integer age;

    @MapsId("deptId")
    private Department department;
    // getters and setters omitted for brevity 
}

JPA 2.2 規范的第 2.4.1 節討論了派生的身份(帶有示例)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM