Java GenerationType.TABLE:数据库中的大数字
我有一个名为Log的接口和两个子类Java GenerationType.TABLE:数据库中的大数字,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个名为Log的接口和两个子类DescriptiveLog和TraceabilityLog 所以我想为每个子类创建一个表。 我的界面如下: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Log implements Serializable { @Id @GeneratedValue(strategy= GenerationType.TABLE
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;
}
@实体
公共类DescriptiveLog扩展日志{
私有字符串描述;
...
}
@实体
公共类可跟踪性日志扩展日志{
@OneToMany(mappedBy=“traceabilityLog”)
私人收藏可追溯性登录项;
}
数据库中还有一个名为hibernate\u sequence
的表,其中有一个属性Log
当我保存可追溯性或描述性日志时,我在数据库中看到它们的ID中有一个类似24535的值
所以我想把它们分开 我认为,如果要使用表策略为表生成ID,您需要向JPA提供程序(在您的例子中是hibernate)提供更多信息 假设您的
hibernate_序列
表中有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。当我在类中添加一个新错误时:检查控制是否根据配置的DatasourceOk检查持久化orm注释,但这是一个IDE错误。。您在运行时有实际问题吗?谢谢,运行时没有问题。