【发布时间】:2012-02-08 01:26:51
【问题描述】:
我需要能够获得一个序列号(我不介意这代是否有漏洞),我认为 SQL 序列将是完美的匹配。
我正在使用 Play 框架,它使用由 hibernate 支持的 JPA2。
我现在的问题是,我似乎无法让 Hibernate 生成序列作为应用程序启动时自动 ddl 更新的一部分。
我能找到的关于使用 @SequenceGenerator 的每个文档似乎都与实体 ID 相关,而不是如何定义一个独立于用于实体 ID 的序列。
谢谢。
编辑:只是为了给这个问题提供更多背景信息,我正在做的是实现一个保持高分的服务,当玩家第一次开始游戏时,它会向服务器询问访客帐户。
来宾帐户的用户名形式为玩家 + 号码,例如“player123123”,其中号码将根据我尝试使用的顺序生成。
当用户注册时,他将能够将用户名更改为自定义的,但不是以玩家 + 任何形式的形式,因此名称空间玩家 + 号码仍然可以免费用于访客帐户。
EDIT2:现在我通过定义一个永远不会使用的额外无用实体来使其工作,并且只使用该实体中的序列,但它是一个丑陋的黑客。
忽略针对我的具体问题的可能解决方案(黑客攻击),我想知道 hibernate 和 jpa2 是否可以声明与实体关联或独立于任何实体的额外(不是用于 id 生成的)序列和让休眠自动在数据库中创建它们。
【问题讨论】:
-
恕我直言,自动 ddl 更新在启动快速 n' 脏项目时很有用。成熟后,您应该拥有 SQL 脚本来在启动应用程序之前自动创建模式。将此序列创建指令放入此脚本中。
-
现在我正处于项目的快速而肮脏的阶段,所以我现在不想手动维护额外的 SQL 脚本,当是时候将它投入生产时我会这样。
-
在数据库中显式创建序列。 Hibernate 不会知道它,所以它的自动 DDL 生成不会删除它。
-
此时,我正在使用内存数据库进行大多数测试和开发。
-
然后在启动时打开到数据库的JDBC连接,自己创建序列。
标签: hibernate jpa playframework