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

标签 hibernate jpa-2.0 guice-persist

我使用 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/

相关文章:

gwt - Guice-Persist:尝试在关闭的 EntityManager 上执行操作

java - Hibernate/JPA 在启动时不验证数据库模式

java - Hibernate 3.3 继承@IdClass 中的@DiscriminatorColumn

java - Hibernate,单表继承和使用父类(super class)字段作为鉴别器列

java - 写 DAO : how to override or implements the interface methods in abstract class?

jpa-2.0 - 如何使用 bool 条件编写 JPA 查询

java - 使用 JOIN 实现 JPA 请求

java - JPA OneToMany/ManyToOne 关系不起作用——我错过了什么?

java - 让我的 EventListeners 触发我的 @ElementCollection 属性有什么诀窍?

jpa - Guice Persist 是否提供事务范围或应用程序管理的 EntityManager?