gpt4 book ai didi

hibernate - JPA2 + Hibernate + Guice-persist : Version Behavior

转载 作者:行者123 更新时间:2023-12-04 05:48:49 25 4
gpt4 key购买 nike

我使用 Hibernate 3.6 Final、Guice-persist 和 JPA2。

太好了,我已经配置好了一切,我的 bean 有一个 @Version private Long version; , 带有 getter 和 setter。

我已经在所有字段中实现了 equals 和 hashcode。

我的 dao 保存方法是:

@Transactional
public void save(Product p){ em.persist(p); }

但是,如果我这样做:
Product p = new Product("name"); //id=null, version=null
dao.save(p); //works, id!=null, version=0
Product p2 = new Produto(10, 0, "other name"); //id, version, name
dao.save(p2); //works, but the version isnt updated, so my version still 0

然后,如果我更改名称并再次尝试保存,则会收到“StaleObjectstateException 行已被更新或删除...”...

我想知道我该怎么做才能让实体管理器在保存对象时更新版本……以及为什么坚持不这样做。

提前致谢。

最佳答案

(忽略代码说的是新产品而不是新产品)
对于 p2,您在对象实例化时设置 id 和版本,然后将其持久化。
持久化后,对象 p2 的状态与上次已知的持久化状态保持不变 -> 无需更新版本。

(
执行类似 p2.setName("yet another name") 的操作,然后执行 p2.getVersion() ... 以查看效果。

p otho 没有任何版本,也没有由“你”通过代码或通过 PresistenceContext 直接设置。一旦你持久化了 p,它就会在一个持久化上下文中得到管理,因此得到一个版本号——在这种情况下它得到了版本 0(新创建的)。

关于hibernate - JPA2 + Hibernate + Guice-persist : Version Behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com