首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate,级联操作,重复操作

Hibernate,级联操作,重复操作
EN

Stack Overflow用户
提问于 2015-08-07 13:42:53
回答 2查看 34关注 0票数 0

我在两个表、人和地址之间有一个多到多的关系,中间有一个表Person_Address。我为这些实体提供了Daos和服务

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

所发生的是具有不同ids的重复值。

这样做的可能方法是在添加之前检查数据库,但是如果要这样做,我将编写自己的SQL查询,而不是hibernate。有没有办法让我在hibernate中实现我的目标?

人类

代码语言:javascript
复制
@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<>();

地址类

代码语言:javascript
复制
@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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 14:00:34

如果实体没有ID. Hibernate将以不同的方式创建更新。

您应该在前面使用地址的预填。或者在保存前使用标准API搜索输入的地址。

票数 0
EN

Stack Overflow用户

发布于 2015-08-07 13:57:51

也许一种解决方案是更改数据库并将完整的入口设置为主键,您可以通过连接其他字段来获得它。为了确保嵌入内容是相同的,我认为您必须将其格式化为小写或大写。因此,当您将adresse,它将是主键,您将没有重复的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31879240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档