Spring 使用合并持久性单元管理器后未调用Hibernate事件侦听器

Spring 使用合并持久性单元管理器后未调用Hibernate事件侦听器,spring,hibernate,spring-data,spring-data-jpa,Spring,Hibernate,Spring Data,Spring Data Jpa,我有一个组件,它是作为我们项目的依赖项开发和添加的。。。我需要使用该组件中指定的实体,为此,我必须使用SpringDataJPA项目中的MergingPersistenceUnitManager。 此组件定义了一个persistence.xml,其unitName与使用它的父项目相同。 现在,我有两个persistence.xml文件,它们都是在使用MergingPersistenceUnitManager创建EntityManagerFactory期间加载的 一切正常,实体在容器启动期间被加载

我有一个组件,它是作为我们项目的依赖项开发和添加的。。。我需要使用该组件中指定的实体,为此,我必须使用SpringDataJPA项目中的MergingPersistenceUnitManager。 此组件定义了一个persistence.xml,其unitName与使用它的父项目相同。 现在,我有两个persistence.xml文件,它们都是在使用MergingPersistenceUnitManager创建EntityManagerFactory期间加载的

一切正常,实体在容器启动期间被加载和检测。。。 然而,我在这里面临的问题是,我声明的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;
   }
公共类LMCoreEntityAuditListener
实现PreInsertEventListener、PreUpdateEventListener、Initializable{
私有静态最终字符串由=“modifiedBy”修改;
“createdBy”创建的私有静态最终字符串;
@凌驾
公共布尔值onPreInsert(最终PreInsertEvent事件){
系统输出打印号(“ssss”);
if(!(event.getEntity()instanceof LMBaseEntity)){
返回false;
}
最终的LMBaseEntity实体=(LMBaseEntity)事件。getEntity();
if(!(全局线的实体实例)| |(entity.getCreatedTimestamp()==null)){
//审计机关(实体);
最后一个字符串user=SecurityContextUtil.getOriginalUser();
最终列表props=Arrays.asList(event.getPersister().getPropertyNames());
event.getState()[props.indexOf(创建人)]=用户;
event.getState()[props.indexOf(MODIFIED_BY)]=用户;
}
返回false;
}

任何帮助都将不胜感激。可能我缺少一些基本的东西。依赖项已正确配置。

来自spring data的MergingPersistenceUnitManager没有合并属性

将其与包含属性的合并单元管理器的以下示例进行比较


观察得很好!为了完整起见,您介意打开一个JIRA来添加这个吗?谢谢!