Hibernate @OneToOne映射不适用于@Inheritation

Hibernate @OneToOne映射不适用于@Inheritation,hibernate,jpa,jboss,persistence,Hibernate,Jpa,Jboss,Persistence,我对@OneToOne的映射和jboss下的部署有问题 我有等级制度: @Entity @Table(name = "SEED") @Inheritance @DiscriminatorColumn(name = "ENTITY_TYPE") @ForceDiscriminator public class Parent implements Serializable { @Id @SequenceGenerator(name = "SEED_SEQ", sequenceName =

我对@OneToOne的映射和jboss下的部署有问题

我有等级制度:

@Entity
@Table(name = "SEED")
@Inheritance
@DiscriminatorColumn(name = "ENTITY_TYPE")
@ForceDiscriminator
public class Parent implements Serializable
{
   @Id
   @SequenceGenerator(name = "SEED_SEQ", sequenceName = "SEED_SEQ")
   @GeneratedValue(generator = "SEED_SEQ")
   @Column(name = "AA_ID")
   protected Long aaId;

   @Column(name = "SECRET_SEED")
   protected String seed;

   @Column(name = "ENTITY_ID") 
   protected String entityId; 

   //getters and setters
}

@Entity
@DiscriminatorValue(value = "c1")
public class Child1 extends Parent
{
}

@Entity
@DiscriminatorValue(value = "c2")
public class Child2 extends Parent
{
}
我曾尝试以这种方式映射子类:

@Entity
@Table(name = "CLINIC")
public class Clinic implements Serializable
{
   @Id
   @GeneratedValue(generator = "SEQ_CLINIC_RECID")
   @SequenceGenerator(name = "SEQ_CLINIC_RECID", sequenceName = "SEQ_CLINIC_RECID")
   @Column(name = "ID")
   private Long id;

   @Column(name = "CODE")
   private String code;

   @OneToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "CODE", referencedColumnName = "ENTITY_ID", insertable = false, updatable = false)
   private Child1 child1;

   //getters and setters
}
当我在jboss-4.2.3.GA上部署这个时,我有以下异常:

org.hibernate.AnnotationException: referencedColumnNames(ENTITY_ID) of setup.entities.Clinic.child1 referencing setup.entities.Child1 not mapped to a single property
at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:16
5)
        at org.hibernate.cfg.FkSecondPass.doSecondPass(FkSecondPass.java:63)
        at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:428)
        at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.
java:286)
        at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)
        at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1233)
        at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java
:154)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:869)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:407)
        at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)
我使用hibernate 3.2.6.ga,hibernate entitymanager 3.3.1.ga


为什么会出现这个错误?我的映射是否正确?

当父实体中的ID列为“AA\U ID”时,您的referencedColumnName引用的是“实体\U ID”。我想把它改成“AA_ID”可以解决你的问题。从Hibernate给出的异常来看,它似乎在引用AA_ID的联接列中默认,然后也使用您定义的联接列。然后异常表示它未映射到单个属性

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CODE", referencedColumnName = "AA_ID", insertable = false,     updatable = false)
private Child1 child1;

不幸的是,代码字段应该与实体ID链接,我无法更改架构。“实体ID”映射到哪里?在您的示例中是否缺少该属性?它映射到父类:@Column(name=“ENTITY\u ID”)受保护的字符串entityId;我编辑了您的示例以包含此内容。您需要做的一件事是使该字段唯一:@Column(name=“ENTITY\u ID”,unique=true)我看不到在Child1或Parent中映射的“ENTITY\u ID”字段。