【问题标题】:Java JPA - save() an object with @JoinTable attributeJava JPA - save() 具有@JoinTable 属性的对象
【发布时间】:2021-09-22 15:54:21
【问题描述】:

我正在尝试在我的数据库中插入一行。我有以下 sql 设置(它只是一个例子): 表person: (身份证,姓名)

person_street: (person_id, street_id)

street (身份证,姓名)

这应该是多对多的关系。这个例子没有意义,但我想你会理解这个想法。

现在我在 java 中有这些实体

@Entity
@Table(name = "person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @JoinTable(
            name = "person_street",
            joinColumns = @JoinColumn(name = "person_id"),
            inverseJoinColumns = @JoinColumn(name = "street_id")
    )
    @ManyToMany
    private List<Street> streets;

}

这是处理我的个人对象的一个​​很好的解决方案(从我的数据库中读取它们之后)。 但是我在插入/创建人员对象时遇到了问题。

我想在我的前端创建一个新人。它使用String name, List&lt;Long&gt; streets 在我的后端调用一个REST 接口。

现在我想将这个新人(具有给定的名字和街道)插入我的数据库中。

但我不想在我的street 表上选择所有List&lt;Long&gt; streets。无需更改街道对象的任何值。我只想插入新人和现有街道之间的链接(在表中person_street)。

最简单的方法是什么? 我可以为此使用我的 Person 类,还是需要一个新的不同类。

T

【问题讨论】:

  • 有很多方法可以做到这一点,但您认为哪种方法最简单?最省时间?最明白的?更短的那个?我不会放弃最简单的(从street 中选择),因为 JPA 足够快

标签: java sql spring-data-jpa


【解决方案1】:

您可以将此方法添加到 Person 类中

 public void addStreets(Street street) {
        if(streets==null) {
            streets=new ArrayList<Street>();
        }
        streets.add(street);
    }

然后,您通过街道表中的 id 获取街道,并将其添加到您从前端获取的相应人员中,然后保存整个人。

【讨论】:

  • 当然可以,但我需要先访问街道表才能获取街道对象。这并不酷,因为不需要在街道表上进行选择。
  • 你想从街道表中得到什么数据?你能解释一下你的要求是什么那么容易描述吗?
  • 我不想要街道表中的任何信息。我想在 person 表中保存一行,我想添加一个人与我拥有的现有街道对象之间的连接。
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2015-11-16
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多