如何使用Hibernate实现一对多和多对多关系?代码举例讲解

在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>