元の質問は、次の質問に由来します。
この JPA 2.0 マッピングによって Eclipse/JBoss Tools でエラーが発生するのはなぜですか?
ご覧のとおり、このコンスタレーションは Eclipse Dali JPA バリデーターもびっくりさせます。JPA仕様では、ここに示すようにこれが許可されているようです(ある程度信頼できます):
最初の質問に投稿された正確なコードでも、Hibernate MappingException が発生します。
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) 列への単純な単一列参照です。ここでは継承が何らかの影響を与える可能性がありますが、それでもそれほど複雑ではないことに注意してください。
それで、これは休止状態のバグですか?