繁体   English   中英

休眠保存/更新级联

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM