通过Hibernate检索Oracle序列



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

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

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

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

感谢

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

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

编辑:sequencename更新

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

*您可以通过hibernate创建本机查询,并使用'select mySequence.nextval from dual追加到索引号。

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

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

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

@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)

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

最新更新