Оптимистическая блокировка JPA - установка @Version для класса сущности приводит к тому, что запрос включает VERSION в качестве столбца

Я использую JPA Toplink Essential, Netbean6.8, GlassFish v3.

В моем классе Entity я добавил @Version annotation, чтобы включить optimistic locking при фиксации транзакции, однако после того, как я добавил аннотацию, мой запрос начал включать VERSION в качестве столбца, что вызвало исключение SQL.

Ничего из этого не упоминается ни в одном учебнике, который я видел до сих пор. Что может быть не так?

Фрагмент

public class MasatosanTest2 implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Column(name = "username")
    private String username;
    @Column(name = "note")
    private String note;

    //here adding Version
    @Version
    int version;

используемый запрос:

SELECT m FROM MasatosanTest2 m

Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException
Call: SELECT id, username, note, VERSION FROM MasatosanTest2 

person Meow    schedule 28.12.2010    source источник
comment
Это нормально. Для оптимистичной блокировки требуется выделенный столбец управления на стороне базы данных.   -  person Benoit Courtine    schedule 28.12.2010


Ответы (1)


Вы должны добавить версию в качестве числового столбца в свою таблицу. Этот столбец будет использоваться для оптимистичной блокировки.

Но я предпочитаю поле даты для оптимистичной блокировки, чтобы вы могли отслеживать, когда этот объект изменился.

person Gursel Koca    schedule 28.12.2010
comment
Ааа.. Ясно, например столбец с датой последнего изменения??? Так должен ли JPA, если требуется блокировка, иметь столбец версии (или альтернативы) для каждой таблицы? - person Meow; 29.12.2010