如果我有一个简单的 Person
类:
public class Person {
@OneToOne
private Address address;
@OneToMany
private List<Car> cars;
}
Address
和 Car
是否需要有一个 Person
字段?大多数教程都是这样显示的,即存在双向通信。
但在我的例子中,我只需要一个人的地址和汽车,而不需要地址或汽车中的人。
您将如何在 Hibernate 中映射它?谁应该对 mappedBy
负责?
最佳答案
单向@OneToOne 主键关联:
@Entity
@Table(name="person")
public class person{
@Id
@Column(name="person_id")
@GeneratedValue
private Integer personId;
private String name;
@OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn
private address address;
//getters & setters
}
@Entity
@Table(name="address")
public class address{
@Id
@Column(name="address_id")
private Integer addressId;
private String street;
//getters & setters
}
单向@OneToMany 主键关联:
@Entity
@Table(name="person")
public class person{
@Id
@Column(name="person_id")
@GeneratedValue
private Integer personId;
private String name;
@OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn
private address address;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "person_id")
private List<car> cars;
//getters & setters
}
更新
您应该很清楚,一个实体如何在一列中保留这么多 ID?
请始终记住,许多方面将有单个对象作为外键,而一侧将有列表来保存子对象。
所以你有两个选择: 1)使用特定的表来存储您的一个和多个实体之间的关系。像这样:
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "person_id")
private List<car> cars;
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch07.html#collections-mapping
2) 你也可以说 Many cars belongs to One person 所以在 car 类中我们也这样写:
@ManyToOne
private person person;
此信息用于一对多和多对一的单向映射。
关于java - OneToOne 和 OneToMany 是否需要在 Hibernate 的两侧进行映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661182/