在Hibernate中,一对多和多对多关系使用外键关联实现,主要有以下两种方式:
一对多关系:
- 一方的表定义外键指向多方的主键。
- 一方保存多方的对象引用。
- 注解配置一方实体的@OneToMany,多方实体的@ManyToOne注解指定关系。
例如:
@Entity
public class Customer {
@Id
private Integer id;
private String name;
@OneToMany(mappedBy="customer")
private Set<Order> orders = new HashSet<>();
}
@Entity
public class Order {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name="customer_id")
private Customer customer;
}
配置:
<set name="orders">
<key column="customer_id"/>
<one-to-many class="Order"/>
</set>
多对多关系:
- 新建一张关联表,包含外键指向各个实体的主键。
- 各个实体保存对方集合的引用。
- 使用@ManyToMany注解配置双方关系,指定关联表及各自在关联表中的外键。
例如:
@Entity
public class Customer {
@Id
private Integer id;
private String name;
@ManyToMany
@JoinTable(name="customer_order",
joinColumns=@JoinColumn(name="customer_id"),
inverseJoinColumns=@JoinColumn(name="order_id"))
private Set<Order> orders = new HashSet<>();
}
@Entity
public class Order {
@Id
private Integer id;
@ManyToMany(mappedBy="orders")
private Set<Customer> customers = new HashSet<>();
}
配置:
<set name="orders" table="customer_order">
<key column="customer_id"/>
<many-to-many column="order_id" class="Order"/>
</set>