2011-04-28 3 views
0

원래 질문은이 질문에서 유래 :최대 절전 모드 : 하위 테이블의 대체/자연 키 열에 대한 참조를 매핑 할 때 버그가 발생합니까?

Why is this JPA 2.0 mapping giving me an error in Eclipse/JBoss Tools?

이 별자리는 이클립스 달리 JPA의 검증을 괴물 볼 수 있듯이.

Does the JPA specification allow references to non-primary key columns?

첫 번째 질문에 게시 된 정확한 코드는 또한 최대 절전 모드 MappingException 제기 : (어느 정도 신뢰할 수있는) 여기에 본 바와 같이 JPA 스펙이 허용 보인다

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: geoareas] Unable to configure EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:374) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) 
    at tld.geoareas.Main.main(Main.java:69) 
Caused by: org.hibernate.MappingException: property [_tld_geoareas_model_Zip__identifierMapper.country] not found on entity [tld.geoareas.model.Country] 
    at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:378) 
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:414) 
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:115) 
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1550) 
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1473) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1389) 
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345) 
    at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1477) 
    at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1096) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:278) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:362) 
    ... 4 more 
Caused by: org.hibernate.MappingException: property [_tld_geoareas_model_Zip__identifierMapper.country] not found on entity [tld.geoareas.model.Country] 
    at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:424) 
    at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:375) 
    ... 15 more 

나는 특히 초조 해요 "재귀 적 속성"에 의해. 결국 이것은 GeoAreas 서브 테이블 Countries의 UNIQUE, NOT NULL CHAR (2) 컬럼에 대한 간단한 단일 컬럼 참조 일뿐입니다. 상속이 여기에 영향을 미칠 수도 있지만 IMHO는 여전히 지나치게 복잡하지 않습니다.

그래서 이것은 Hibernate 버그입니까?

답변

0

내 질문에 답하기 :

최대 절전 모드 버그가 아닙니다. 파생 된 식별자로 동시에 사용될 때 비 PK 컬럼에 대한 참조를 금지하는 것은 JPA 2.0 스펙입니다. 자세한 내용은 여기 내 다른 답변을 참조하십시오 : 그것은 또한 EclipseLink가있는 매핑 예외를 일으키는

Why is this JPA 2.0 mapping giving me an error in Eclipse/JBoss Tools?

주 (당신이 단지보다 의미있는 스택 추적을 얻을) :

Exception Description: The derived composite primary key attribute [country] of type [java.lang.String] from [tld.geoareas.model.ZipId] should be of the same type as its parent id field from [tld.geoareas.model.Country]. That is, it should be of type [java.lang.Integer]. 
    at org.eclipse.persistence.exceptions.ValidationException.invalidDerivedCompositePKAttribute(ValidationException.java:1134) 
    at org.eclipse.persistence.internal.jpa.metadata.MetadataDescriptor.validateDerivedPKClassId(MetadataDescriptor.java:1817) 
    at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ObjectAccessor.processId(ObjectAccessor.java:450) 
    at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ObjectAccessor.processOwningMappingKeys(ObjectAccessor.java:659) 
    at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ManyToOneAccessor.process(ManyToOneAccessor.java:110) 
    at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor.processDerivedId(ClassAccessor.java:1409) 
    at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.processDerivedId(EntityAccessor.java:823) 
    at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processAccessorsWithDerivedIDs(MetadataProject.java:1294) 
    at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processStage3(MetadataProject.java:1560) 
    at org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.processORMMetadata(MetadataProcessor.java:484) 
    at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:453) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1080) 
    ... 6 more