我需要能够获得一个序列号(我不介意这一代中是否存在漏洞)我认为SQL序列将是完美的匹配。
我正在使用Play框架,它使用由hibernate支持的JPA2。
我现在的问题是,在启动应用程序时,我似乎无法让Hibernate生成序列作为自动ddl更新的一部分。
我可以找到关于使用@SequenceGenerator的每个文档似乎与实体ID相关,而不是如何定义与用于实体id的序列无关的序列。
感谢。
编辑:为了给出更多关于问题的背景信息,我正在做的是实现一项保持高分的服务,玩家第一次启动游戏时会向服务器请求访客帐户。访客帐户有一个玩家+号码形式的用户名,如“player123123”,其中号码将从我尝试使用的序列中生成。
当用户注册时,他可以将用户名更改为自定义内容,但不能以播放器+任何形式更改,以便命名空间播放器+号码可以免费用于访客帐户。
EDIT2:现在我通过定义一个永远不会被使用的额外无用实体来工作,只使用该实体的序列,但这是一个丑陋的黑客。
忽略我的具体问题的可能解决方案(hacks),我想知道是否可以使用hibernate和jpa2声明额外的(不是用于id生成的那个)序列与实体相关或独立于任何实体和让hibernate自动在db中创建它们。
答案 0 :(得分:1)
序列生成器(使用@SequenceGenerator
定义)应该在整个持久性单元中是唯一的,因此可以重用它们。 This question处理此(或多或少)具体问题。
要记住以下几点:
@MappedSuperclass
Model
,播放框架将自动添加和ID字段到您的实体,所以请记住,以防您想要覆盖该行为答案 1 :(得分:0)
在您展开id
时,Play会自动为该类添加数字Model
。
鉴于您不介意差距而且您只需要数字序列,我建议您使用id
Play提供作为序列的参考。
注意:我在这里假设您希望该序列链接到可能包含更多数据的实体。如果情况并非如此,这可能无效。