如何在Hibernate XML映射中使用序列?
文档提到了<generator>
元素。但是,我希望序列是列而不是ID。
答案 0 :(得分:5)
我知道在使用Hibernate和Oracle时,映射文件中的id定义如下:
<id name="id" column="item_id">
<generator class="sequence">
<param name="sequence">NAME_OF_YOUR_SEQUENCE</param>
</generator>
</id>
您还可以将生成器类指定为“native”,如果您随后切换到自动递增的RDMS(如MySQL),这将非常方便。然后在MySQL中忽略序列位。
修改强> 只需重新阅读您的问题。我不认为hibernate处理非id列上的序列。我看到的一般方法是向表中添加触发器,但这不是一个很好的解决方案。
答案 1 :(得分:1)
如果您使用单独的Oracle序列,Hibernate将首先向DB查询下一个值,然后执行插入(除非您使用优化策略来获取它们的一大块)。
您可以通过调整hibernate xml文件以包含以下属性来检索oracle在输入上分配的值,从而将这两个执行合并为一个:
<property name="hibernateProperties">
<props>
...
<prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
...
</props>
在列上使用序列标识
<generator class="sequence-identity">
<param name="sequence">SEQ_NAME</param>
</generator>