Spring 数据jpa保存

Spring data jpa save

我怎样才能通过考试? (在迁移我的代码以使用存储库之前正在工作)。 bs 保存后存储在数据库中,但对象没有更新。我必须做什么才能实现它?

鉴于这些 类:

@Entity
public class A {
   @Id
   private String id;
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinColumn(name = "aId")
   private Set<B> bs= new HashSet<B>();
   ...
}

@Entity
public class B {
   @Id
   @GeneratedValue
   private int id;
   private String aId;
   private String foo;
   ...
}

和存储库:

@RepositoryDefinition(domainClass = A.class, idClass = String.class)
public interface ARepository {
   ...
   void save(A a);
   ...
}

此测试失败:

    // "a" saved and flushed
    B b = new B();
    b.setAId(a.getId());
    a.getBs().add(b);
    ARepository.save(a);
    assertTrue(b.getId() > 0);

可能是因为B对象还没有进入持久化状态。一旦它被保存 - 你不应该得到错误。

应该是这样的:

// "a" saved and flushed
B b = new B();
BRepository.save(b)
b.setAId(a.getId());
a.getBs().add(b);
ARepository.save(a);
assertTrue(b.getId() > 0);

您能否提供堆栈跟踪信息?真的很有帮助。

repository.save() 执行 persist(如果提供的参数是瞬态的)或 merge(否则)。

由于 a 不是瞬态的,因此执行 merge,这意味着没有 persist 操作可以级联到 bs

您要么必须显式保存 b,要么在保存 a 之前将 b 添加到新的 a,以便 persist 级联正确。