我有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);
表格如下所示:
然后我再次将 A 对象保存为 B 对象中的不同值:
SomeRepository.save(A);
然后表格看起来像这样:
表 B 已正确扩展,但表 A_B 只是覆盖了 B_id,而不是将新的添加到 4 行。
然后,当我从数据库检索对象 A 时,我仅从 B 对象获取最后 4 个值。
如何使其在不覆盖的情况下保存新值(向 A_B 添加新行)?
编辑:
我将 A_id 添加为 B 表的外键。再次 - 第一次保存已正确存储:
然后,在使用 B 的不同值进行第二次保存后,它会修改 A_id 列的值,以便首先插入 4 个值(为 null)。所以表格看起来像这样:
最佳答案
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/