【发布时间】:2015-08-07 13:42:53
【问题描述】:
我在 2 个表 Person 和 Address 与中间表 Person_Address 之间存在多对多关系。我有这些实体的 Daos 和服务
我想要的是当一个人被添加一个地址列表时,如果地址已经存在于数据库系统中,那么应该将这些地址的 id 添加到 Person_Address 表中。
会发生具有不同 ID 的重复值。
这样做的可能方法是在添加之前检查数据库,但如果我这样做,那么我将编写自己的 SQL 查询而不是休眠。有没有办法让我在hibernate中实现我的目标?
人物类
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@Column(name = "personID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String surName;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "PERSON_ADDRESS", joinColumns = {
@JoinColumn(name = "PERSONID")}, inverseJoinColumns = {
@JoinColumn(name = "ADDRESSID")})
private List<Address> addresses = new ArrayList<>();
地址类
@Entity
@Table(name = "ADDRESS")
public class Address {
@Id
@Column(name = "addressID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "addresses")
private List<Person> residents;
private String street;
private String state;
private String country;
private String postCode;
【问题讨论】:
-
据我所知,没有办法做到这一点。如果您在没有“id”的情况下传入一个实体进行持久化,它将获得一个新实体。因此,如果您向 Person 提供一个已经存在的地址,请确保该地址有一个 id。