【问题标题】:Hibernate: mapping @OneToMany / @ManyToOne problems (not using entity primary keys)Hibernate:映射@OneToMany / @ManyToOne 问题(不使用实体主键)
【发布时间】:2011-11-15 07:35:45
【问题描述】:

我是 Hibernate / Spring 的新手,试图在创建一个小的 Web 实用程序的同时映射遗留数据库,这应该可以减轻同事的一些工作。由于我已经映射了实体并可以访问基础数据,因此我在以后遇到了一些问题。长话短说,我有两个实体,客户

@Entity
public class Customer implements Serializable{

    @Id
    @Column(name = "RecordID")
    private Integer id;

    @Column(name = "CUSTOMERNAME1")
    private String name;

    @OneToMany
    @JoinColumn(name="CUSTOMER1", referencedColumnName="CUSTOMERNAME1")
    private List<Contract> contracts;
}

和合同:

@Entity
public class Contract implements Serializable {

    @Id
    @Column(name = "RECORDID") //RecordID
    private Integer id;

    @Column(name = "CONTRACTID1") //ContractID1
    private String contractId;

    @Column(name = "CUSTOMER1") //Customer1
    private String customerName;

    //@ManyToOne
    //private Customer customer;  // how can I write the reverse mapping?
}

从客户到合同的映射有效(一个客户可以有很多合同,我可以使用客户中的 List contracts 字段来获取它们,但我的问题是,我怎样才能实现相反的 - 即让客户映射到哪个合约?

【问题讨论】:

  • “多”端始终是关系的所有者,因此您在该端定义连接表。对于这个示例,您实际上不需要连接表:多方字段可以存储其所有者的引用。

标签: java hibernate orm annotations persistence


【解决方案1】:

Java API 有一些如何使用 ManyToOne 注解的示例: http://java.sun.com/javaee/6/docs/api/javax/persistence/ManyToOne.html

类似于以下内容:

客户类别:

@OneToMany(mappedBy="customer", cascade=CascadeType.ALL)
private List<Contract> contracts;

合约类:

@ManyToOne
@JoinColumn(name="customer_id", nullable=false)
private Customer customer;  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多