繁体   English   中英

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);

repository.save()确实persist (如果提供的参数是瞬时的)或merge (否则)。

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

你要么必须保存b明示或添加b到一个新的a对前a被保存,以便persist正确的级联。

可能的原因是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);

还可以请您提供stacktrace吗? 真的很有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM