我有以下簡單的設計:休眠:AnnotationException:未知的mappedBy在...引用屬性上的反向(的mappedBy)未知,雙向@OneToOne協會
Valid XHTML http://www.kawoolutions.com/media/persons-roles-reduced.png
這基本上非解決方法 - JPA不支持的分離繼承。人可以自己存在,但可以選擇單個玩家實體,單個教練實體或兩個實體來完成邏輯。
這裏是比較容易理解的JPA 2.0映射(注意@Id正向關聯):
@Entity
@Table(name = "Persons")
public class Person implements Serializable
{
@Id
@Column(name = "id")
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@OneToOne(mappedBy = "person")
private Coach coach = null;
@OneToOne(mappedBy = "person")
private Player player = null;
...
}
@Entity
@Table(name = "Players")
public class Player implements Serializable
{
@Column(name = "registration_nbr")
private String registrationNbr = null;
@Id
@OneToOne
@JoinColumn(name = "id")
private Person person = null;
...
}
@Entity
@Table(name = "Coaches")
public class Coach implements Serializable
{
@Column(name = "license_nbr")
private String licenseNbr = null;
@Id
@OneToOne
@JoinColumn(name = "id")
private Person person = null;
...
}
的球員和教練的實體類幾乎是相同的。
這裏的問題是兩個雙向關聯(mappedBy)。這些映射與EclipseLink的完美,但不知何故休眠與AnnotationException怪胎:
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: persons] 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.persons.Main.main(Main.java:32)
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: tld.persons.model.Person.coach, referenced property unknown: tld.persons.model.Coach.person
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:159)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1686)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1393)
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
當切換到老派JPA 1.0映射所有再次運行正常。 Hibernate似乎有上述映射的問題。
我看了很多其他的問題報告,其實在hibernate.org上的論壇充滿了類似的未解決的問題,但我找不到任何線索爲什麼會引發異常。
對我來說,它似乎是一個Hibernate的bug。任何人都可以證實這一點? (注意我使用休眠3.6)
謝謝,這有幫助! – 2013-11-30 00:51:39