具有2实体类为两个不同的数据库表,Table1.java
具有IDS手动生成和Table2.java
已经序列生成的ID,是否可以移动id属性,所述@Id
和@Column
注释和getters & setter for id到GenericTable的超类,并且留下@GeneratedValue
和@SequenceGenerator
里面的子类只需要它们?该解决方案必须可扩展为这两种类型的数百个表,并且不应将GenericTable超类分为两类。休眠重构@Id字段进行超
的问题是,@GeneratedValue
作品只在现场/方法的水平,因此必须将其移至作出强制实施@SequenceGenerator
与Table1.java
特性冲突的所有子类的父类。
@Entity
@Table(name = "TABLE1")
public class Table1 extends GenericTable {
@Id
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
private Long id;
// other properties
// getters & setters for id
// other getters & setters
}
@Entity
@Table(name = "TABLE2")
public class Table2 extends GenericTable {
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "generator")
@SequenceGenerator(name = "generator", sequenceName = "TABLE2_SEQ", allocationSize = 1)
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
private Long id;
// other properties
// getters & setters for id
// other getters & setters
}
@MappedSuperclass
public abstract class GenericTable {
}
我还有两个问题要问你:1.如果你有更多的表格,比如Table2,但序列名称不同,你会如何改变你的例子。 2.如果您需要更多超类(如Dictionary)(具有标签和状态属性),可审计(具有更多列)等等,您将最终为每个序列感知和非序列感知基本类型复制每个抽象类型。你会如何重构这种情况? – pXel