我有一个组件,它是作为项目依赖项开发和添加的...我需要使用该组件中指定的实体,为了做到这一点,我必须使用Spring data-jpa项目中的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;
}
非常感谢任何帮助。也许我错过了一些基本的东西。依赖项已正确配置。
答案 0 :(得分:0)
Spring数据中的MergingPersistenceUnitManager未合并属性。
将它与包含属性的合并单位管理器的以下示例进行比较。