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