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
映射中(尽管我怀疑这是否有帮助)
您还可以尝试从classContact
中删除abstract
修饰符(尽管这可能不是您想要做的)
希望有帮助 对不起,事实上,我觉得您的映射看起来非常好。这个错误消息让我感到困惑,因为显然在
leads
表中不应该有一列contact
。映射定义了contacts
表中的外键列。Hibernate还应该支持多态的一对一关联
您可以尝试将targetEntity
参数添加到类Lead
中的Contact
映射中(尽管我怀疑这是否有帮助)
您还可以尝试从classContact
中删除abstract
修饰符(尽管这可能不是您想要做的)
希望有帮助
@OneToOne(cascade = CascadeType.ALL, mappedBy = "lead", targetEntity = Contact.class)
public Contact getContact() {
return contact;
}