我有两节课。 一类扩展另一类。 这两个类都将保留在数据库中。 为什么我仍然得到:引起:org.hibernate.MappingException:实体映射中的重复列:com.ct.www.model.Bt列:q_Id(应使用insert =“false”update =“false”映射)
Questions.class
@Entity
@Table(name="Questions")
@Access(value = AccessType.FIELD)
public class Questions implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
//@Access(value= AccessType.FIELD)
private String q_Id;
@Column(name="q_type")
private String q_Type;
@Column(name="q_lang")
private String q_lang;
@Access(value = AccessType.PROPERTY)
public String getQ_Type() {
return q_Type;
}
public void setQ_Type(String q_Type) {
this.q_Type = q_Type;
}
@Id
@Column(name="q_Id")
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Access(value = AccessType.PROPERTY)
public String getQ_Id() {
return q_Id;
}
public void setQ_Id(String q_Id) {
this.q_Id = q_Id;
}
@Access(value = AccessType.PROPERTY)
public String getQ_lang() {
return q_lang;
}
public void setQ_lang(String q_lang) {
this.q_lang = q_lang;
}
}
BT.class
@Entity
@Table(name="BT")
@Access(value = AccessType.FIELD)
public class BT extends Questions implements Serializable{
private static final long serialVersionUID = 1L;
@Access(value = AccessType.FIELD)
// @Id
// @Column(name="q_Id")
private String q_Id;
@Access(value = AccessType.PROPERTY)
public String getQ_Id() {
return q_Id;
}
public void setQ_Id(String q_Id) {
this.q_Id = q_Id;
}
// @OneToOne(cascade = CascadeType.ALL)
// @PrimaryKeyJoinColumn
// @JoinColumn(name="q_id")
// @MapsId
private Questions question;
public Questions getQuestion() {
return question;
}
public void setQuestion(Questions question) {
this.question = question;
}
}
我的一个用例是 问题和BT将分别保存在MySQL(问题表和BT表)中的相应表中。 BT是一种问题。所以我决定扩展它。 两个表都有一个主键,它是Id,我的DAO类将首先插入到Questions表中,并为BT类使用相同的Id,后者将其插入到BT表中。
答案 0 :(得分:1)
扩展Entity
的基类会导致此问题。
你可以:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
。有关示例代码,请参阅Section 2.11.4 in Hibernate-5.3.1.Final User Guide。
如果您需要在父级和子级中使用不同的生成策略,则可以覆盖子级中的getQ_Id()
方法并实现该方法。