Hibernate OneTONE映射不适用于抽象子类

Hibernate OneTONE映射不适用于抽象子类,hibernate,mapping,one-to-one,Hibernate,Mapping,One To One,我有一个令人沮丧的映射问题,肯定需要一些眼球。 我有一个抽象类,它的子类采用单表的继承策略。 它持有一个联系,并且还需要是一个具有相同继承策略的抽象类。 这是我的密码: @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING) @Table(name

我有一个令人沮丧的映射问题,肯定需要一些眼球。 我有一个抽象类,它的子类采用单表的继承策略。 它持有一个联系,并且还需要是一个具有相同继承策略的抽象类。 这是我的密码:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
@Table(name = "leads")
@Cache(region = "com.qe.model.Lead", usage = CacheConcurrencyStrategy.READ_WRITE)
public abstract class Lead {
    private Long id;
    protected Contact contact;


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "lead")
    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}


@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
@Table(name = "contacts")
@Cache(region = "com.qe.model.Contact", usage = CacheConcurrencyStrategy.READ_WRITE)
public abstract class Contact {

    private Long id;
    private Lead lead;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne
    @JoinColumn(name = "lead_id")
    public Lead getLead() {
        return lead;
    }

    public void setLead(Lead lead) {
        this.lead = lead;
    }
}
@Entity
@DiscriminatorValue("AUTO")
public class AutoContact extends Contact {
}
我得到一个错误:

无法在表中确定com.qe.model.AutoContact的类型: 列的潜在客户:[org.hibernate.mapping.Column(contact)]


如果您有任何想法,我们将不胜感激……

对不起,事实上,您的地图在我看来非常合适。这个错误消息让我感到困惑,因为显然在
leads
表中不应该有一列
contact
。映射定义了
contacts
表中的外键列。Hibernate还应该支持多态的一对一关联

您可以尝试将
targetEntity
参数添加到类
Lead
中的
Contact
映射中(尽管我怀疑这是否有帮助)

您还可以尝试从class
Contact
中删除
abstract
修饰符(尽管这可能不是您想要做的)


希望有帮助

对不起,事实上,我觉得您的映射看起来非常好。这个错误消息让我感到困惑,因为显然在
leads
表中不应该有一列
contact
。映射定义了
contacts
表中的外键列。Hibernate还应该支持多态的一对一关联

您可以尝试将
targetEntity
参数添加到类
Lead
中的
Contact
映射中(尽管我怀疑这是否有帮助)

您还可以尝试从class
Contact
中删除
abstract
修饰符(尽管这可能不是您想要做的)

希望有帮助

@OneToOne(cascade = CascadeType.ALL, mappedBy = "lead", targetEntity = Contact.class)
public Contact getContact() {
  return contact;
}