JPAигнорируются, но @PrePersist и @PreUpdate работают нормально - PullRequest
1 голос
/ 01 июня 2011

Я столкнулся со странной проблемой. У меня есть целая модель домена, определенная в файле orm.xml. Все мои сущности в моем проекте - просто простые POJO (вообще никаких аннотаций jpa). Я хочу сохранить последнее обновление и временные метки вставки моих сущностей, и я решил использовать «pre persist» и «pre update», как и большинство из нас. Итак, я определил базовый класс сущностей и позволил всем своим сущностям расширять его.

Странно, что pre-persist (и все остальные события) вызываются только тогда, когда я определяю их с помощью аннотаций. Когда я определяю их в файле orm.xml - ничего не происходит, они просто игнорируются.

Это работает для меня:

public abstract class BaseEntity {

  private Timestamp insertTimestamp;
  private Timestamp lastUpdateTimestamp;

  @PrePersist
  public void onPersist() {
  ...   
  }

  @PreUpdate
  public void onUpdate() {
  ...
  }
}

Но после удаления аннотаций и перехода на xml ничего не работает:

<mapped-superclass class="com.my.model.BaseEntity">
   <pre-persist method-name="onPersist"/>
   <pre-update method-name="onUpdate"/>
   <post-load method-name="postLoad"/>
</mapped-superclass> 

В соответствии со спецификацией JPA приведенные выше декларации в xml выглядят правильными.

Понятия не имею, где искать проблему.

Я использую EclipseLink 2.2.0 с H2 в среде SE.


UPDATE:

Спасибо за ваш ответ. Там нет ошибок в журнале / консоли, чтобы увидеть. Кажется, что события просто игнорируются.

Как вы и думали, это может быть ошибкой, поскольку перемещение методов и объявлений XML из суперкласса в подкласс решает проблему. Для меня это не желаемое решение, так как я хочу иметь глобальное решение для всех организаций, но продвинуло меня немного вперед.

Я отправил отчет об ошибке ребятам из EclipseLink:)

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

Спасибо!

1 Ответ

1 голос
/ 02 июня 2011

Ваш XML выглядит правильно.Есть ли какие-либо ошибки в журналах?

Это может быть ошибка с MappedSuperClass и событиями сущности.Можете ли вы попробовать установить событие на подкласс и посмотреть, работает ли оно?Если это так, то это, вероятно, ошибка, зарегистрируйте ее в Eclipse Bugzilla.

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

...