【问题标题】:Spring Data does not save related entitySpring Data 不保存相关实体
【发布时间】:2019-11-08 03:48:56
【问题描述】:

我有几个实体

@Entity
@Table(name = "A")
public class A {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "alIdSeq")
    @SequenceGenerator(name = "aIdSeq", sequenceName = "a_id_seq", allocationSize = 1)
    private Long id;

    @JoinColumn(name = "a_id", referencedColumnName = "id")
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    private List<B> b = new ArrayList<>();

}
@Entity
@Table(name = "B")
public class B {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "blIdSeq")
    @SequenceGenerator(name = "aIdSeq", sequenceName = "b_id_seq", allocationSize = 1)
    private Long id;

}

示例:当我从 repo 获取对象 A 并将新对象 B 添加到列表时,存储库不会保存新对象 B。

A a = aRepository.findById(someId);
B b = new B();
a.getB().add(B);

注意:Sql表不包含新B。

【问题讨论】:

    标签: java spring postgresql jpa spring-data


    【解决方案1】:

    您应该将合并添加到 cascade ,它仅在持久化时设置

    只需添加CascadeType.MERGE

    @JoinColumn(name = "a_id", referencedColumnName = "id")
    @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    private List<B> b = new ArrayList<>();
    

    【讨论】:

      【解决方案2】:

      您的对象a 已经创建的主要问题,并且没有发生持久化操作。 如果您尝试使用一些 B 元素创建(持久)新实体 (A),则新的 B 将包含在 sql 表中。

      【讨论】:

        猜你喜欢
        • 2014-05-05
        • 2023-03-04
        • 2019-09-30
        • 2019-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多