[英]Hibernate Save/Update Cascade
有一个类A:
class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DBId")
private Long DBId = null;
@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
List<B> list;
}
和B级一样
class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DBId")
private Long DBId = null;
}
当我想要持久化A类的新实例时,有两种情况是可能的。 1- A中B的所有实例都是新的,在这种情况下,一个简单的session.save(A)就可以了。 2- A中B的部分或全部实例都是旧的。 如何保存A以便不会有重复的Bs。 saveOrUpdate会解决问题吗? 或者只是通过查看A来决定选择保存或更新,例如,如果A是新的,它也会调用B上的保存,如果A是旧的,它还会调用Bs上的更新?
此外,我看到我的代码中只有一个简单的session.save(A),并且它没有产生冗余的Bs。 我错了吗? 这可能吗?
问候
更新:在旧B的情况下,旧B的实例附加到会话,并正确设置DBId。
您的实体比会话更长寿吗? 如果没有,则不必使用update()
或saveOrUpdate()
。 当你调用session.save()
,Hibernate通过检查实体的状态来知道是insert
还是update
。 你可以在这里阅读有关各州的更多信息: http : //docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#objectstate-overview
这同样适用于级联。 当操作级联到集合时,Hibernate将检查集合中实体的状态,如果它们已处于PERSISTENT
状态,则不会尝试插入它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.