我正在使用休眠实体-以及序列生成器。
我的数据库是Oracle 12c。
在我的序列生成器中-它获取表中已经存在的值。
我尝试查找问题-找到了一个相似的线程 Hibernate sequence nextVal resolved but not used (Oracle)
但是仍然没有帮助。面临的问题是-它有时会起作用,有时会不起作用
下面是我的代码段-
@Entity
@Table(name="TABLE_NAME", schema = "SCHEMA")
@SequenceGenerator(name="TABLE_ID_SEQ_GEN", sequenceName="SCHEMA.TABLE_ID_SEQ",allocationSize=1)
public class ImportTransactionDataEntity {
@Id
@Column(name="TABLE_ID",unique=true,nullable=false)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="TABLE_ID_SEQ_GEN" )
private int IDColumnPk;
感谢您的帮助,谢谢:)
答案 0 :(得分:0)
尝试
@Entity
@Table(name="TABLE_NAME")
@SequenceGenerator(name="TABLE_ID_SEQ_GEN",sequenceName="TABLE_ID_SEQ",allocationSize=1)
public class ImportTransactionDataEntity {
@Id
@Column(name="TABLE_ID",unique=true,nullable=false)
@GeneratedValue(strategy=GenerationType.AUTO,generator="TABLE_ID_SEQ_GEN" )
private int IDColumnPk;
它像这样存储在您的数据库中,最后一个数字是最后使用的ID,所以不用担心丢失计数,因为数据库会为您这样做
答案 1 :(得分:0)
根据Oracle文档,@SequenceGenerator应该添加到字段中,而不是添加到类中:
https://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cmp30cfg001.htm#BCGGHADG
类似:
@Entity
@Table(name="TABLE_NAME", schema = "SCHEMA")
public class ImportTransactionDataEntity {
@Id
@Column(name="TABLE_ID",unique=true,nullable=false)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="TABLE_ID_SEQ_GEN" )
@SequenceGenerator(name="TABLE_ID_SEQ_GEN", sequenceName="SCHEMA.TABLE_ID_SEQ",allocationSize=1)
private int IDColumnPk;
这对我有用。
答案 2 :(得分:0)
最后-我得出了一个已经使用oracle 12 C的解决方案-决定使用它自己的表上的Identity列。
注意-但是,在Oracle 12c之前,identity列不可用。
我最终还是获得了更好的性能,因此这项工作让我感到宽慰
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TABLE_ID", updatable = false, nullable = false)
private int IDColumnPk;