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

问题描述 投票:4回答:2

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

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

hibernate sequence hibernate-mapping
2个回答
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
投票

如果您使用单独的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>
© www.soinside.com 2019 - 2024. All rights reserved.