2010-07-15 73 views
4

我想知道是否有一种干净的(或原生的)方式为表格生成序列,以便将其用作序列号。它需要是连续的(1,2,3 ...等),并避免任何可能的种族/交易问题(如果多个用户试图保持相同的时间)。它不需要成为主键。序列号的JPA序列

@Id 
    private Long id; 

    private Long serialNumber; 

谢谢。

回答

2

我不知道是否有一个干净的(原生)的方式来生成序列表,使用它作为一个序列号。

据我所知,不,不适用于非Id字段。

但是,您可以使用具有适当生成器策略的专用实体,并在需要获取下一个ID时持久保留新实例。

另一种选择是模拟一个TABLE生成器策略,并使用本机SQL从它读取下一个ID并增加它。

+0

我想第二个选项是直截了当的,只要事务得到保证(如果许多并发用户试图创建相同的实体)。 – bsr 2010-07-15 21:22:11

+0

@bsreekanth:是的,我第二次(这很可能是我实现的)。 – 2010-07-15 21:23:52

+0

正如您在下面评论的那样,我一直在寻找非id字段的解决方案。举一个例子,假设我们有2个客户,并且需要每个客户的customer_request_id是连续的。例如。 Intel_1,Intel_2 ...,IBM_1,IBM_2 .. – bsr 2010-07-15 21:28:16

1

@id @GeneratedValue(strategy = IDENTITY)?

+0

该OP正在寻找一个非'Id'字段的解决方案。 – 2010-07-15 20:56:50

1

DataNucleus支持在非ID字段中使用@GeneratedValue。

+0

谢谢..这是一个整洁的功能..不幸的是,我使用基于hibernate的系统。 – bsr 2010-07-16 09:10:14