Sql 基本实体无表的Hibernate继承
我从未在hibernate中使用过继承,我不知道应该使用哪种策略(甚至我真的需要使用这种策略)。我有三个具有相同接口(相同列)的表,我想为它们创建三个具有基本接口的实体,因此看起来如下所示:Sql 基本实体无表的Hibernate继承,sql,hibernate,jpa,Sql,Hibernate,Jpa,我从未在hibernate中使用过继承,我不知道应该使用哪种策略(甚至我真的需要使用这种策略)。我有三个具有相同接口(相同列)的表,我想为它们创建三个具有基本接口的实体,因此看起来如下所示: @Entity + Basic + @Entity @Table(name="TABLE_1") Table1 + @Entity @Table(name="TABLE_2") Table2 + @Entity @
@Entity
+ Basic
+ @Entity
@Table(name="TABLE_1")
Table1
+ @Entity
@Table(name="TABLE_2")
Table2
+ @Entity
@Table(name="TABLE_3")
Table3
public void process(BaseEntity entity){
// processing..
}
如您所见,我不想将表用于基本实体。如果有可能实现这种继承,如何实现?也许我不需要“休眠”继承,我应该使用普通继承
在应用中,它是这样使用的:
@Entity
+ Basic
+ @Entity
@Table(name="TABLE_1")
Table1
+ @Entity
@Table(name="TABLE_2")
Table2
+ @Entity
@Table(name="TABLE_3")
Table3
public void process(BaseEntity entity){
// processing..
}
@Entity
@Table(name="USER")
class User {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "SOME_ID", referencedColumnName = "ID", nullable = false)
private Basic basicEntity; // how to use proper strategy using some configuration value (eg. class static attribute or configuration value stored in db?)
}
我认为这是实现目标的推荐方式:
@MappedSuperclass
public abstract class BaseEntity {
public static final int SHARED_PAREMETER = 2;
@Column(name = "modified", columnDefinition = "TIMESTAMP DEFAULT NOW()")
protected Date modified;
//... other fields, getters and setters
}
@Entity
@Table(name = "TABLE_1")
public class Table1 {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "SOME_ID", referencedColumnName = "ID", nullable = false)
private Table2 table2;
}
@Entity
@Table(name = "TABLE_2")
public class Table2 {
@Id
private Integer id;
}
在本例中,我们将只有两个表,但这两个表都有来自BaseEntity的字段。但是,您不能在实体中建立与抽象类的关系,但在处理过程中,您完全有权这样做:
@Entity
+ Basic
+ @Entity
@Table(name="TABLE_1")
Table1
+ @Entity
@Table(name="TABLE_2")
Table2
+ @Entity
@Table(name="TABLE_3")
Table3
public void process(BaseEntity entity){
// processing..
}