我的代码中有这个映射:
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意味着什么?
修改 我知道它现在使用序列。序列的名称是我感兴趣的。
答案 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值: