プロジェクトへの依存関係として開発および追加されたコンポーネントがあります...そのコンポーネントで指定されたエンティティを使用する必要があり、そのためにはSpring data-jpaプロジェクトのMergingPersistenceUnitManagerを使用する必要がありました。このコンポーネントは、それが使用されている親プロジェクトと同じ unitName を持つ persistence.xml を定義します。現在、2 つの persistence.xml ファイルがあり、どちらも MergingPersistenceUnitManager を使用して EntityManagerFactory の作成中に読み込まれます。
すべてが正常に機能し、コンテナの起動時にエンティティが読み込まれて検出されます...ただし、ここで直面する問題は、宣言された休止状態のリスナーがまったく呼び出されないことです..それらは呼び出されないようで、動作することを確認しましたコンポーネントを削除し、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>
2番目のpersistence.xmlはこれだけです
<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
MergingPersistenceUnitManager の使用を開始した後、リスナーが呼び出されないことに気付きました...これは、そのうちの 1 つのスニペットです。
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;
}
どんな助けでも大歓迎です。多分私は何か基本的なものを見逃しています。依存関係が適切に構成されている。