我想知道是否有一种干净的(或原生的)方式为表格生成序列,以便将其用作序列号。它需要是连续的(1,2,3 ...等),并避免任何可能的种族/交易问题(如果多个用户试图保持相同的时间)。它不需要成为主键。序列号的JPA序列
@Id
private Long id;
private Long serialNumber;
谢谢。
我想知道是否有一种干净的(或原生的)方式为表格生成序列,以便将其用作序列号。它需要是连续的(1,2,3 ...等),并避免任何可能的种族/交易问题(如果多个用户试图保持相同的时间)。它不需要成为主键。序列号的JPA序列
@Id
private Long id;
private Long serialNumber;
谢谢。
我不知道是否有一个干净的(原生)的方式来生成序列表,使用它作为一个序列号。
据我所知,不,不适用于非Id
字段。
但是,您可以使用具有适当生成器策略的专用实体,并在需要获取下一个ID时持久保留新实例。
另一种选择是模拟一个TABLE生成器策略,并使用本机SQL从它读取下一个ID并增加它。
@id @GeneratedValue(strategy = IDENTITY)?
该OP正在寻找一个非'Id'字段的解决方案。 – 2010-07-15 20:56:50
@SequenceGenerator
http://wiki.eclipse.org/EclipseLink/Examples/JPA/PrimaryKey#Using_Sequence_Objects
该OP正在寻找一个非'Id'字段的解决方案。 – 2010-07-15 20:56:10
DataNucleus支持在非ID字段中使用@GeneratedValue。
谢谢..这是一个整洁的功能..不幸的是,我使用基于hibernate的系统。 – bsr 2010-07-16 09:10:14
我想第二个选项是直截了当的,只要事务得到保证(如果许多并发用户试图创建相同的实体)。 – bsr 2010-07-15 21:22:11
@bsreekanth:是的,我第二次(这很可能是我实现的)。 – 2010-07-15 21:23:52
正如您在下面评论的那样,我一直在寻找非id字段的解决方案。举一个例子,假设我们有2个客户,并且需要每个客户的customer_request_id是连续的。例如。 Intel_1,Intel_2 ...,IBM_1,IBM_2 .. – bsr 2010-07-15 21:28:16