Реализуете "прикосновение" к сущности JPA? - PullRequest
1 голос
/ 27 мая 2011

В нашем базовом классе сущностей (из которого происходят все сущности) у нас есть, среди прочего, 2 метода. Один помечен @PrePersist, который в основном просто устанавливает dateCreated, а другой помечен @PreUpdate, который устанавливает dateUpdated поле.

Это прекрасно работает, так как мы не хотим устанавливать поле dateUpdated при создании. Как часть дизайна, мы также делаем два метода protected, чтобы другие разработчики не пошли и явно не связались с этими двумя датами (также без установщиков).

Кроме того, мы можем достаточно легко расширить любую сущность, чтобы задать поле dateUpdated при создании, определив метод для фактической сущности, а также аннотировать его с помощью @PrePersist, так что эта часть покрыта.

Теперь, моя проблема на данный момент в том, что есть случай, когда мы хотели бы явно обновить поле dateUpdated на объекте, без каких-либо данных об этом (в основном touch это). Есть ли элегантный способ сделать это? Я действительно не хочу реализовывать метод, который меняет одно из его полей, а затем меняет его обратно. И мы хотели бы, чтобы в этих полях были сущности без методов установки.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 27 мая 2011

Вы пытались просто изменить значение поля dateUpdated?Я предполагаю, что это должно сделать сущность измененной на Hibernate, и Hibernate вызовет метод @PreUpdate, который вернет поле dateUpdated к текущему времени:

public void touch() {
    this.dateUpdated = -1;
}
0 голосов
/ 27 мая 2011

Аннотируйте поле dateUpdated с помощью @Version, удаляйте обратный вызов preUpdate и используйте em.lock (entity, LockModeType.WRITE) до совершения транзакции. Помните, что необходимо управлять сущностью, чтобы принудительно обновить столбец версии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...