0

我在 oracle 中定义了以下序列:

CREATE SEQUENCE MySequence
MINVALUE 65536 
MAXVALUE 4294967296 
START WITH 65536
INCREMENT BY 1
CYCLE
NOCACHE
ORDER;

我想知道如何通过 Hibernate 访问它(每次我请求的下一个值)?(通过 JDBC 我使用了 getGEnerateKeys)

在需要持久化的另一个实体上使用它之前,我需要该 id。

谢谢

4

3 回答 3

1

我认为只要序列是您的主键 - 例如

@Id
@GeneratedValue(strategy = GenerationType.AUTO) 
private int id;

然后当你运行:

 Integer id = (Integer)session.save(obj);  

它将返回 id。

请参阅 Javadoc:http ://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html#save(java.lang.Object )

于 2012-08-21T08:34:37.797 回答
1

没有 JPA 标准的方法可以做到这一点,但如果您确实需要,您当然可以访问底层 JDBC 连接。但请注意,一旦实体被持久化,实体的 ID 应该会自动填充。

于 2012-08-21T08:35:52.127 回答
1

对于 Oracle,您应该使用GenerationType.SEQUENCE

  @Id
    @GeneratedValue(generator="MySequence", strategy=GenerationType.SEQUENCE)
    @SequenceGenerator(allocationSize=1, name="MySequence", sequenceName="MySequence")

编辑:序列名称已更新

编辑:参考您的评论:您的要求听起来像使用序列的复合/嵌入 id(使用多列作为主键)。但不幸的是,这两种解决方案都不支持序列生成器。到目前为止,我可以说;

*您可以通过休眠创建本机查询并使用 ' 附加到索引号select mySequence.nextval from dual

*或者您可以使用通过子查询显示序列+索引的新列创建一个 oracle 视图。

*这是一个非常实验性的,我没有尝试,但你可以使用 @formula 注释。这里的例子。

于 2012-08-21T08:37:17.430 回答