如何在Hibernate中使用序列作为XML映射中的属性

时间:2011-02-22 18:22:43

标签: hibernate sequence hibernate-mapping

如何在Hibernate XML映射中使用序列?

文档提到了<generator>元素。但是,我希望序列是列而不是ID。

2 个答案:

答案 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>