SpringDataJPA使用Oracle序列设置值:主键字段、非主键字段

SpringDataJPA使用Oracle序列设置值:主键字段、非主键字段,第1张

项目使用SpringDataJPA+Hibernate+Oracle,使用Oracle序列设置Entity对应的主键值,这个很常见。实现步骤如下:

1>创建一个Oracle序列:

2>在实体中引用:

现在同一个Entity实体的,另一个非主键字段也需要使用序列来设置值。后来自己发现:不能在同一个Entity中,通过@GeneratedValue和@SequenceGenerator标签使用多个Oracle序列。

使用SpringDataJPA的原生sql语句查询序列的下一个值。然后在service层调用此方法获取下一个序列值,手动设置到Entiry的非主键字段上去。

参考文章:

1.How do you get a Oracle Sequence value with JPA?

2.SpringDataJPA原生sql语句执行

根据我自己的经验,oracle的序列是不认自己填写的数字的,所以想要这么 *** 作只能先删除序列才可以。

如果是修改的话,要删除序列才能修改,也就是数艘要分三步 *** 作

(1)删除序列(把语句复制下来),可是也要复制触发器的语句(当然重新编译一下触发器也可以,这样会让触发器无效)

(2)修改序号(至于你说的修改为指定区间,这个简单,比如你要把1-20,改为50001-50020,那么就是id+50000即可,只要where中限定范围就可以了。)

(3)重建序列,并重新设定起始值(至少设定为新的最大值+1),别忘了相关触发器


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11136231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存