【发布时间】:2020-04-02 09:48:16
【问题描述】:
我有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);
表格看起来像这样:
然后我在 B 对象中使用不同的值再次保存 A 对象:
SomeRepository.save(A);
那么表格如下所示:
表 B 已正确扩展,但表 A_B 只是覆盖了 B_id 而不是将新的 B_id 放入 4 行。
然后,当我从数据库中检索对象 A 时,我只从 B 对象中获取最后 4 个值。
如何在不覆盖的情况下保存新值(向 A_B 添加新行)?
编辑:
我将 A_id 作为外键添加到 B 表中。再次 - 第一次保存正确存储:
然后在使用 B 的不同值进行第二次保存后,它会修改 A_id 列的值以插入第一个可插入的 4 个值(为空)。所以表格看起来像这样:
【问题讨论】:
-
为什么要为 oneToMany 关系使用不同的表?
-
@a_horse_with_no_name 我使用 JPA。
-
@Tarun 我不明白你的意思。有没有其他方法可以做到这一点?
-
我的意思是,如果这是一对多关系,您可以将 B 表中 A 的 id 保存为外键,而不是使用不同的表 A_B。
-
@Tarun 我将 A_id 添加为 B 表的外键。第一次保存正确存储,但第二次保存我获得:A_id 列的空值?
标签: java postgresql jpa