我怎样才能通过考试? (在迁移我的代码以使用存储库之前正在工作)。保存后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);
答案 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);
还可以请你提供堆栈跟踪吗?真的很有用。