【发布时间】:2012-02-23 20:28:33
【问题描述】:
我正在使用连接到 MSSQL 数据库的 Roo 1.2.1、JPA 2 和 Hibernate 3.6。
我有一个接受 JSON 并将其解析为实体的 Web 服务;显然,@Version 列将是 0,因为调用该服务的人对此一无所知。当我第一次调用 merge() 时,它工作正常。该对象已正确持久化,并且版本列设置为 1。但是下次我使用相同的数据调用 Web 服务时,它说该对象已过时,这在技术上是正确的,因为版本始终为 0。
他们传递给我们的 ID 保证是唯一的,所以我们使用它作为我们的主键。
我想这会由实体经理以某种方式处理。
所以我的问题是:如何在不先从数据库加载所有实体、然后更新字段、然后重新持久化它们的情况下处理这个问题?这似乎是一种黑客行为。也许我的做法是错误的?
我的实体如下所示:
@RooJavaBean
@RooToString
@RooJson
@RooJpaActiveRecord(table = "MYTABLE", persistenceUnit = "myPersistenceUnit",
transactionManager = "myTransactionManager", versionField = "version", identifierColumn = "myIdField")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
public class MyEntity {
@Id
@Column(name = "myIdField")
private long myIdField;
@Version
@Column(name = "version")
private long version;
@Column("myColumn")
private String someValue;
}
【问题讨论】:
标签: hibernate jpa persistence spring-roo