gpt4 book ai didi

java - JPA存储库表不保存新的ID,而是覆盖或修改

转载 作者:行者123 更新时间:2023-12-01 17:39:21 25 4
gpt4 key购买 nike

我有A.class:

@Entity
@Data
public class A {

@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
Integer id;

String someStringInAclass;

@OneToMany(cascade = CascadeType.ALL)
List<SomeObject> someObjectsList;
}

我有SomeObject.class:

@Entity
@Data
public class SomeObject {

@GeneratedValue(strategy = GenerationType.AUTO)
@Id
Integer id;
String someString;
Integer someInteger;
}

我在数据库中保存一个对象:

SomeRepository.save(A);

表格如下所示:

enter image description here

然后我再次将 A 对象保存为 B 对象中的不同值:

SomeRepository.save(A);

然后表格看起来像这样:

enter image description here

表 B 已正确扩展,但表 A_B 只是覆盖了 B_id,而不是将新的添加到 4 行。

然后,当我从数据库检索对象 A 时,我仅从 B 对象获取最后 4 个值。

如何使其在不覆盖的情况下保存新值(向 A_B 添加新行)?

编辑:

我将 A_id 添加为 B 表的外键。再次 - 第一次保存已正确存储:

enter image description here

然后,在使用 B 的不同值进行第二次保存后,它会修改 A_id 列的值,以便首先插入 4 个值(为 null)。所以表格看起来像这样:

enter image description here

最佳答案

Hibernate 处理单向关系的效率非常低,请尝试使用双向关系。

关于上述问题,这里不需要第三个表,您可以通过添加@JoinColumn来避免创建第三个表,如下所示:

     @OneToMany(cascade = CascadeType.ALL)   
@JoinColumn(name = "fk_a_id")
List<SomeObject> someObjectsList;

这将在 SOME_OBJECT 表中添加“fk_a_id”列。

关于java - JPA存储库表不保存新的ID,而是覆盖或修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60988712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com