问题描述
我在2个表的Person和Address之间有一个多对多的关系,中间是一个Person_Address表。 我为这些实体提供道和服务
我想拥有的是一个添加了地址列表的人,如果数据库系统中已经存在这些地址,则只需将这些地址的ID添加到Person_Address表中即可。
发生的是具有不同ID的重复值。
做到这一点的可能方法是在添加数据库之前检查数据库,但是如果我要这样做,那我将编写自己的SQL查询而不是休眠。 我有什么方法可以实现休眠状态吗?
人类
@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;
1楼
也许一种解决方案是更改数据库并将完整地址设置为主键,则可以通过串联其他字段来获得它。 为确保地址相同,我认为您必须将其格式设置为小写或大写。 因此,当您放置地址时,它将是主键,并且不会有重复的数据。
2楼
如果实体没有ID。 Hibernate创建它的方式有所不同。
您应该在前端使用地址的预填充。 或者在保存之前使用Criteria API搜索输入的地址