如果我有一个简单的Person
类:
public class Person {
@OneToOne
private Address address;
@OneToMany
private List<Car> cars;
}
Address
和Car
是否需要Person
字段?大多数教程以这种方式表明,存在双向通信。
但在我的情况下,我只需要一个人的地址和汽车,但不需要地址或汽车的人。
你如何在Hibernate中映射它?谁应该对mappedBy
负责?
答案 0 :(得分:2)
单向@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?
请记住,许多方面都会为foeign键设置单个对象,因为一方将拥有用于保存子对象的列表。
所以你有两个选择: 1)使用特定的表来存储One和Many实体之间的关系。像这样:
@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)你也可以说许多汽车属于一个人,所以在汽车课上我们也写得像:
@ManyToOne
private person person;
此信息用于一对多和多对一单向映射。