Hibernate Mapping – 使用关联表连接两个表 – 但是有一个扭曲
我有以下实体… Customer
, Card
和Address
顾客:
{ private String cust_id; // Primary key ..... @OneToOne Address address; // I want to load address of the customer. // Can change the association to @OneToMany, if needed }
卡:
{ private String card_id; // Primary Key private String cust_id; // Foreign Key to Customer.cust_id .... }
地址:
{ private String card_id; // Foreign key to card.card_id private String address1; ..... }
当我加载客户时,我想加载带有关联表Card
地址。 但棘手的部分是Address
没有主键。 它只有一个外键。
您可以在@OneToOne之后使用注释@JoinTable指向卡的表,因此您不需要卡的实体,但如果卡的表不仅仅是关系表,您可以将用户卡中的卡映射为@OneToOne并有一个@Transient’getAddress()’方法返回’this.card.getAddress()’,但在卡的实体上你必须映射地址和卡之间的关系(@OneToOne(mappedBy =’card_id’)),并在地址你可以将card_id映射为@Id。
第一选择
顾客:
@OneToOne @JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"), inverseJoinColumns = @JoinColumn(name="card_id")) private Address address;
第二种选择
顾客:
@OneToOne(mappedBy="cust_id") private Card card; ... @Transient public Address getAddress(){ return this.card == null ? null : this.card.getAddress(); }
卡:
@OneToOne(mappedBy="card_id") private Address address;
地址:
@Id private String card_id;
在第二种情况下,卡有一个由两个fks(客户和地址)组成的嵌入式pk
卡:
@EmbeddedId private CustomerAddressPK id;
CustomerAddressPK
@Embeddable public class CustomerAddressPK(){ private String cust_id; private String card_id; }
Customer
和Address
之间的映射可以通过使用从属对象的概念来实现。
查看文档,您将找到类似的示例,其中Person
实体与名为Name
依赖对象之间存在映射。
- org.hibernate.InstantiationException:没有实体的默认构造函数:: principal.Cliente
- 在hibernate查询语言中舍入到小数点后2位
- 没有合适的司机。 尝试使用Hibernate连接到Heroku上的postgresql数据库
- Hibernate持久的Dates
- Spring MVC @ModelAttribute方法返回“Bad request”400
- 启动时出现Hibernateexception
- Hibernate升级到5.2 – 创建会话工厂并替换PersistentClass以获取实体类属性
- Hibernate可以返回除List之外的结果对象的集合吗?
- 如何拦截Hibernate生成的SQL?