![](/img/trans.png)
[英]Exception when save in a JPA definition with Spring Boot + Spring data 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.