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

标签 java postgresql jpa

我有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/

相关文章:

java - 跨浏览器登录?

java - 如何在 JPA 中使用数据库作为数据库源

java - 在 JPA 中使用 Eager Fetch 的场合是什么?

java - 正则表达式 java 中的模式

java - 设置简单 RMI 服务器时出现问题

sql - postgresql::检索匹配精确条件的行或匹配部分条件的行数

sql - 在 Postgres 中从 Db 获取最近 12 个月的数据

postgresql - 无法通过 Spring Boot 将 Docker Desktop Kubernetes (Windows) 服务连接到本地 Postgres 数据库

java - JPQL参数类型错误

java - 需要建议来阐明 mongoDB 存储和检索图像的概念