2012-03-21 2 views
0

나는 프로젝트에 대한 의존성으로 개발되고 추가 된 컴포넌트를 가지고있다 ... 나는 그 컴포넌트와 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; 
    } 

모든 도움을 주시면 감사하겠습니다. 어쩌면 내가 뭔가를 놓친 것 같아. 종속성이 올바르게 구성되었습니다.

답변

0

스프링 데이터의 MergingPersistenceUnitManager가 속성을 병합하지 않습니다.

https://github.com/SpringSource/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java

의 특성을 포함하는 합성 부 관리자의 예는 다음과 비교.

https://dev.c-ware.de/confluence/display/PUBLIC/Multiple+persistence.xml+in+a+multi-module+application

+0

좋은 관찰! 이것을 완벽하게하기 위해 JIRA를 열어 보시겠습니까? 감사! –

관련 문제