【问题标题】:How to link a relationship in spring data without cascading data如何在没有级联数据的情况下链接弹簧数据中的关系
【发布时间】:2020-06-22 22:21:03
【问题描述】:

我正在使用 spring 数据,并且有两个实体之间分别具有 OneToMany 和 ManyToOne 关系。我希望该关系仅用作外键引用,仅此而已,但是当我保存联系人数据时,它还会将所有数据保存在 Person 及其不想要的关系下。我只是希望它将人员实体链接到联系人实体,仅此而已。我尝试了很多方法,包括不同的 Cascade 类型和一起移除 cascade。

@Entity
@Table(name = "person")
public class Person {

    @Id
    @GeneratedValue
    public UUID person_id;


    @OneToMany(mappedBy = "person")
    public List<Contact> contacts;

    ...etc

}
@Entity
@Table(name = "contact")
public class Contact {

    @Id
    @GeneratedValue
    public UUID contact_id;

    @ManyToOne
    @JoinColumn(name = "person_id")
    public Person person;

    ...etc

}

【问题讨论】:

  • 我们可以看看你的 dao/服务层代码吗?

标签: java spring spring-data-jpa spring-data


【解决方案1】:

如果要删除所有级联,只需使用 CascadeType。

https://www.baeldung.com/jpa-cascade-types

【讨论】:

  • 我尝试使用各种级联类型,例如刷新分离,甚至没有级联类型,但功能没有改变
  • 能否编辑您的问题以显示保存联系人的代码,我对您如何处理数据感兴趣,如果您更新问题,也许我可以为您提供更多帮助 :)
【解决方案2】:

当您保存特定人员记录的联系人数据时,如果您按照问题中的描述声明域对象,则该人员记录必须已经存在。所以你会这样做:

Person person = personRepository.findOne(personId);
contact.setPerson(person);
contactRepository.save(contact);

这只是创建一个关系(外键),并将指定人员的主键添加到新创建的联系人记录中。人员记录中没有任何变化。

【讨论】:

  • 是的,人员记录确实存在。为了更清楚地说明人员记录存在并且具有其他关系。当我创建联系人时,我只想从数据库中获取人员并将其链接到人员,但它似乎想要更新那些其他关系,即使数据没有改变。
猜你喜欢
  • 2017-10-16
  • 2013-11-23
  • 2013-09-24
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多