Я использую Roo 1.2.1, JPA 2 и Hibernate 3.6, подключенные к базе данных MSSQL.
У меня есть веб-сервис, который принимает JSON и анализирует его в сущности; очевидно, столбец @Version будет равен 0, потому что человек, вызывающий службу, ничего не знает об этом. Когда я вызываю merge () в первый раз, он работает нормально. Объект сохраняется правильно и столбец версии устанавливается в 1. Но в следующий раз, когда я вызываю веб-сервис с теми же данными, он говорит, что объект устарел, что технически правильно, поскольку версия всегда будет 0.
Идентификатор, который они нам передают, гарантированно будет уникальным, поэтому мы используем его в качестве основного ключа.
Мне бы хотелось подумать, что об этом как-то позаботится менеджер сущностей.
Итак, мой вопрос: как мне справиться с этим, не загружая сначала все сущности из базы данных, затем обновляя поля и затем повторно сохраняя их? Это похоже на взлом; может я об этом неправильно говорю?
Моя сущность выглядит так:
@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;
}