>我有一个名为Log的接口和两个子类DescriptiveLog
和TraceabilityLog
所以我想为每个子类创建表。我的界面是这样的:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Log implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.TABLE)
private Long id;
private Date date;
private String actor;
...
}
和我的子类:
@Entity
public class DescriptiveLog extends Log {
private String description;
...
}
@Entity
public class TraceabilityLog extends Log {
@OneToMany(mappedBy="traceabilityLog")
private Collection<TraceabilityLogItem> traceabilityLogItems;
}
一个数据库我有一个名为hibernate_sequence
另一个表,一个属性日志当我保存可追溯性或描述性日志时,我在数据库中看到它们的 ID 中出现类似 24535 的值所以我想把它们分开。
在我看来,如果您想使用表策略为表生成 ID,则需要为 JPA 提供程序(在您的情况下为休眠(提供更多信息。
假设您的hibernate_sequence
表具有保存主列名和保存下一个可用 id 的seq_val
seq_name
,那么您的映射应该是这样的:
@TableGenerator(name = "LogGen", table = "hibernate_sequence",
pkColumnName = "seq_name", valueColumnName = "seq_val", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "LogGen")
private Long id;
如果刚刚创建了日志表,则可以将日志表的seq_val
设置为 1。