从Hibernate 4.1.2迁移到Hibernate 5.2.17时的序列生成器

时间:2019-01-09 14:06:18

标签: hibernate jpa

我正在尝试将应用程序迁移到所有框架的新版本。但是在将Hibernate从版本4.1.2迁移到版本5.2.17时,遇到了一些奇怪的行为(我也在使用Oracle 12)。

ID的定义如下:

@Id
@SequenceGenerator(name = "LOCATION_ID_GENERATOR", sequenceName = "SEQ_LOCATION")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "LOCATION_ID_GENERATOR")
@Column(unique = true, nullable = false, precision = EntityColumnDefinitions.PRECISION_19)
private Long id;

我看到这段代码没有使用提供的序列,而是使用了一些Hibernate生成的序列ID。因此,数据库中的序列与ID不同步。 我可以通过在ID定义中添加“ allocationSize = 1,initialValue = 1”来修复此问题,并创建一个PL-SQL-Script来更新序列并将其与ID同步。

@Id
@SequenceGenerator(name = "LOCATION_ID_GENERATOR", sequenceName = "SEQ_LOCATION", allocationSize = 1, initialValue= 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "LOCATION_ID_GENERATOR")
@Column(unique = true, nullable = false, precision = EntityColumnDefinitions.PRECISION_19)
private Long id;

我的问题是-是否可以使用与版本4.1.2中相同的机制?我的意思是,为了使用基于数据库中最后一个ID的相同的Hibernate生成的序列ID,ID注释是什么?

1 个答案:

答案 0 :(得分:0)

我认为persistence.xml文件中的此设置可以解决问题:

<property name="hibernate.id.new_generator_mappings" value="false" />

也许这样可以节省一些时间。