私は、プロジェクトに依存して開発されたコンポーネントを持っています...私はそのコンポーネントで指定されたエンティティを使用して、 Springのdata-jpaプロジェクトのMergingPersistenceUnitManagerを使用します。 このコンポーネントは、それが使用されている親プロジェクトと同じunitNameを持つpersistence.xmlを定義します。 ここでは、2つのpersistence.xmlファイルがあり、両方ともMergingPersistenceUnitManagerを使用してEntityManagerFactoryを作成する際に読み込まれます。HibernateのイベントリスナーがマージされたPersistence Unit Managerを使用した後に呼び出されない
コンテナの起動時にすべてがうまく動作し、エンティティが読み込まれて検出されました... しかし、私がここで直面している問題は、私の宣言された休止状態のリスナーは全く呼び出されていません...呼び出されることはないと私は思いますコンポーネントを削除してpersistence.xmlファイルを1つだけ持っていれば動作することを確認しました。
<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;
}
ご協力いただければ幸いです。たぶん私は何か基本的なものを逃している。依存関係は適切に構成されています。
良好な観察!これを完全に追加するためにJIRAを開いてもよろしいですか?ありがとう! –