java - hibernate 、级联操作、重复

标签 java mysql hibernate

我在两个表 Person 和 Address 以及中间表 Person_Address 之间存在多对多关系。我有这些实体的 Daos 和服务

我想要的是,当添加一个人的地址列表时,如果数据库系统中已经存在该地址,则应该将这些地址的 ID 添加到 Person_Address 表中。

发生的情况是具有不同 ID 的重复值。

可能的方法是在添加之前检查数据库,但如果我这样做,那么我将编写自己的 SQL 查询而不是 hibernate。有没有办法让我在 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。 Hibernate 创建了不同的更新。

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

关于java - hibernate 、级联操作、重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879240/

相关文章:

java - ORA-00905: 缺少关键字 Hibernate 查询 Oracle

java - Getter 和assertEquals 函数

mysql REPEATABLE_READ 和尚未存在的行

php - 按行和每行列将表与另一个表进行比较

java - 如何使用 JPA 2.0 急切加载惰性字段?

Hibernate 有效,但在通过 Web 服务调用时无效

java - 在运行时从数据类型oracle中检测数据类型java

java - 如何使JFrame成为模式化的?

java - 如何使用 Vert.x 3 通过 websocket 管理连接的用户?

Mysqldump 和表的顺序