在oracle db上,hibernate对generator class =“native”做了什么?

时间:2011-08-26 09:34:35

标签: oracle hibernate

我的代码中有这个映射:

News.hbm.xml:
<class name="xyz.News" table="XYZ_NEWS">
        <id name="id" column="NEWS_ID">
            <generator class="native"/>
        </id>
rest of mapping
</class>

我正在使用Oracle数据库。 Hibernate文档告诉我:

  

native - 根据底层数据库的功能选择identity,sequence或hilo

这对Oracle意味着什么?

修改 我知道它现在使用序列。序列的名称是我感兴趣的。

2 个答案:

答案 0 :(得分:7)

需要序列。您需要提供序列名称 修改:如果未提供名称,将使用名为 HIBERNATE_SEQUENCE 的序列。

查看代码,让方言决定。 Dialect实现了这样的决定:

// Dialect.cs Line 231
public virtual System.Type NativeIdentifierGeneratorClass
{
    get
    {
        if (SupportsIdentityColumns)
        {
            return typeof(IdentityGenerator);
        }
        else if (SupportsSequences)
        {
            return typeof(SequenceGenerator);
        }
        else
        {
            return typeof(TableHiLoGenerator);
        }
    }
}

Oracle不会覆盖它。 Oracle不支持身份,而是序列。

答案 1 :(得分:1)

这很简单:您的生成器将根据您当前的数据库支持使用标识或序列列:

例如,Oracle有序列,但以前版本的MS SQL服务器没有。

您可以在本文中详细了解身份和序列之间的差异: http://sqlserver-training.com/what-is-the-difference-between-identity-and-sequence/-

本机生成器始终返回long,short或integer值: