Слушатели событий Hibernate, не вызываемые после использования Merging Persistence Unit Manager - PullRequest
0 голосов
/ 21 марта 2012

У меня есть компонент, который был разработан и добавлен в качестве зависимости к нашему проекту ... Мне нужно использовать сущность, указанную в этом компоненте, и чтобы сделать это, мне нужно было использовать MergingPersistenceUnitManager из проекта Spring data-jpa. Этот компонент определяет файл persistence.xml, у которого unitName совпадает с родительским проектом, в котором он используется. Теперь у меня есть два файла persistence.xml, и оба загружаются во время создания EntityManagerFactory с помощью MergingPersistenceUnitManager.

Все работает нормально, и объект загружается и обнаруживается во время запуска контейнера ... Однако проблема, с которой я здесь сталкиваюсь, заключается в том, что мои объявленные слушатели hibernate вообще не вызываются .. Кажется, они никогда не запускаются, и я убедился, что они работают, если я удаляю компонент и у меня есть только один файл persistence.xml.

<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="hibernate.id.new_generator_mappings" value="true"     />
            <property name="hibernate.current_session_context_class"     value="thread" />
            <property name="hibernate.default_batch_fetch_size" value="1000" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
            <property name="hibernate.cache.use_query_cache" value="true" />
            <property name="hibernate.cache.use_structured_entries" value="true" />
            <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory" />
            <property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml" />

            <property name="hibernate.ejb.event.pre-update" value="com......dao.listener.ChangeHistoryMultiSelectListener" />
            <property name="hibernate.ejb.event.pre-insert" value="com......dao.listener.LMCoreEntityAuditListener" />

        <!-- General Debugging -->
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.generate_statistics" value="true" />
        </properties>
    </persistence-unit>

Второй файл persistence.xml как раз такой

    <persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
    </persistence-unit>

Я понял, что после того, как я начал использовать MergingPersistenceUnitManager, мои слушатели никогда не вызывались ... Вот фрагмент из одного из них.

public class LMCoreEntityAuditListener
      implements PreInsertEventListener, PreUpdateEventListener, Initializable {
   private static final String MODIFIED_BY = "modifiedBy";
   private static final String CREATED_BY = "createdBy";

   @Override
   public boolean onPreInsert(final PreInsertEvent event) {
      System.out.println("ssss");
      if (!(event.getEntity() instanceof LMBaseEntity)) {
         return false;
      }
      final LMBaseEntity entity = (LMBaseEntity) event.getEntity();
      if (!(entity instanceof GlobalLine) || (entity.getCreatedTimestamp() == null)) {
         // auditCreates(entity);
         final String user = SecurityContextUtil.getOriginalUser();
         final List<String> props = Arrays.asList(event.getPersister().getPropertyNames());
         event.getState()[props.indexOf(CREATED_BY)] = user;
         event.getState()[props.indexOf(MODIFIED_BY)] = user;
      }

      return false;
   }

Любая помощь будет принята с благодарностью. Может быть, мне не хватает чего-то простого. Зависимости правильно настроены.

1 Ответ

0 голосов
/ 22 марта 2012

MergingPersistenceUnitManager из данных источника не объединяет свойства.

https://github.com/SpringSource/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java

Сравните это со следующим примером менеджера объединяющихся единиц, который включает свойства.

https://dev.c -ware.de / слияния / дисплей / Public / Множественный + persistence.xml + в + а + мульти-модуль + приложение

...