当前位置: 代码迷 >> java >> 休眠,级联操作,重复项
  详细解决方案

休眠,级联操作,重复项

热度:25   发布时间:2023-07-25 20:02:42.0

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

也许一种解决方案是更改数据库并将完整地址设置为主键,则可以通过串联其他字段来获得它。 为确保地址相同,我认为您必须将其格式设置为小写或大写。 因此,当您放置地址时,它将是主键,并且不会有重复的数据。

如果实体没有ID。 Hibernate创建它的方式有所不同。

您应该在前端使用地址的预填充。 或者在保存之前使用Criteria API搜索输入的地址

  相关解决方案