在Hibernate中,多对多关联可以通过join table(联接表)和@ManyToMany注解实现。主要步骤如下:
- 定义两个实体类,并在其中定义@ManyToMany注解与mappedBy属性:
- @ManyToMany注解标识多对多关联关系。
- mappedBy属性指定维护关系的一方。
例如:
public class Customer {
@Id
private int id;
private String name;
@ManyToMany(mappedBy = "customers")
private Set<Order> orders = new HashSet<>();
}
public class Order {
@Id
private int id;
@ManyToMany
@JoinTable(name = "customer_order")
private Set<Customer> customers = new HashSet<>();
}
- 定义联接表实体:
- 需要用@Entity注解标识,并在表中定义两个外键,与相关的实体关联。
例如:
@Entity
@Table(name = "customer_order")
public class CustomerOrder {
@Id
@GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
}
- 在hibernate.cfg.xml中配置映射:
<mapping class="com.demo.Customer"/>
<mapping class="com.demo.Order"/>
<mapping class="com.demo.CustomerOrder"/>
- 执行操作:
- 我们可以直接通过双方的集合属性维护多对多关系。Hibernate会自动同步联接表数据。
例如:
Customer c1 = session.get(Customer.class, 1);
Order o1 = session.get(Order.class, 1);
c1.getOrders().add(o1); // c1关联o1
o1.getCustomers().add(c1); // o1关联c1
session.save(c1);
Hibernate的多对多关联映射可以轻松实现复杂关系的维护,这也使其成为Java领域最流行的ORM框架。理解多对多映射的配置与操作是Hibernate必修的高级知识点。