我有一个名为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;
}
DataBase我有另一个名为hibernate_sequence
的表,一个属性Log
当我保存可跟踪性或描述性日志时,我在数据库中看到它们的ID中的值为24535
所以我想把它们分开。
答案 0 :(得分:1)
在我看来,如果你想使用表策略为你的表生成id,你需要给JPA提供者(在你的情况下是hibernate)更多的信息。
假设您的hibernate_sequence
表格有seq_name
来保存主要列名,而seq_val
用于保存下一个可用的ID,那么您的映射应该是这样的:
@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.