Hibernate中如何实现多对多关联?代码举例讲解

在Hibernate中,多对多关联可以通过join table(联接表)和@ManyToMany注解实现。主要步骤如下:

  1. 定义两个实体类,并在其中定义@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<>();
}
  1. 定义联接表实体:
  • 需要用@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;
}
  1. 在hibernate.cfg.xml中配置映射:
<mapping class="com.demo.Customer"/>
<mapping class="com.demo.Order"/>  
<mapping class="com.demo.CustomerOrder"/>
  1. 执行操作:
  • 我们可以直接通过双方的集合属性维护多对多关系。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必修的高级知识点。