通过Hibernate检索Oracle序列

时间:2012-08-21 08:24:30

标签: java oracle hibernate

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

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

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

在我将其用于需要保留的另一个实体之前,我需要id。

由于

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

编辑:序列名已更新

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

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

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

*这个非常实验性,我没有尝试,但你可以使用@formula注释。示例here