Hibernate序列对象有问题-无法调用下一个Val

时间:2018-08-28 10:27:27

标签: java hibernate

我正在使用休眠实体-以及序列生成器。

我的数据库是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;

感谢您的帮助,谢谢:)

3 个答案:

答案 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,所以不用担心丢失计数,因为数据库会为您这样做

enter image description here

答案 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;