나는 프로젝트에 대한 의존성으로 개발되고 추가 된 컴포넌트를 가지고있다 ... 나는 그 컴포넌트와 inorder에 명시된 엔티티를 사용해야 만한다. Spring data-jpa 프로젝트의 MergingPersistenceUnitManager를 사용하십시오. 이 구성 요소는 unitName이 사용되는 상위 프로젝트와 동일한 persistence.xml을 정의합니다. 이제 두 개의 persistence.xml 파일이 있고 MergingPersistenceUnitManager를 사용하여 EntityManagerFactory를 생성하는 동안 두 파일이 모두로드됩니다.Hibernate 병합 Persistence Unit Manager를 사용한 후에 Listener가 호출되지 않는다.
모든 것이 잘 작동하며 컨테이너가 시작될 때 엔티티가로드되고 감지됩니다 ... 그러나 여기서 내가 직면 한 문제는 내 선언 된 최대 절전 모드 리스너가 전혀 호출되지 않은 것입니다. 그들은 결코 호출되지 않는 것처럼 보입니다. 구성 요소를 제거하고 단 하나의 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
여기 ... 나는 내가 MergingPersistenceUnitManager를 사용하기 시작 후 내 청취자가 호출되지 않습니다 것을 깨달았다 그냥이<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
입니다 그들 중 하나에서 미리보기입니다.
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를 열어 보시겠습니까? 감사! –