Spring数据jpa保存

时间:2015-07-17 13:07:32

标签: java spring jpa spring-data

我怎样才能通过考试? (在迁移我的代码以使用存储库之前正在工作)。保存后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);

2 个答案:

答案 0 :(得分:3)

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

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

您必须明确保存b或在保存b之前将a添加到新的a,以便正确级联persist

答案 1 :(得分:1)

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

还可以请你提供堆栈跟踪吗?真的很有用。