MMTTMM
该API文档都对这个很清楚。所有生成器都实现了org.hibernate.id.IdentifierGenerator接口。这是一个非常简单的界面。一些应用程序可以选择提供自己的专用实现,但是,Hibernate提供了一系列内置实现。内置生成器的快捷方式名称如下:增量生成long,short或int类型的标识符,仅当没有其他进程将数据插入同一个表时才是唯一的。不要在群集中使用。身分支持DB2,MySQL,MS SQL Server,Sybase和HypersonicSQL中的标识列。返回的标识符的类型为long,short或int。序列使用DB2,PostgreSQL,Oracle,SAP DB,McKoi中的序列或Interbase中的生成器。返回的标识符的类型为long,short或int希洛在给定表和列(分别默认为hibernate_unique_key和next_hi)作为hi值的源时,使用hi / lo算法有效地生成long,short或int类型的标识符。hi / lo算法生成仅对特定数据库唯一的标识符。seqhilo在给定命名数据库序列的情况下,使用hi / lo算法有效地生成long,short或int类型的标识符。UUID使用128位UUID算法生成在网络中唯一的字符串类型的标识符(使用IP地址)。UUID编码为长度为32个十六进制数字的字符串。GUID在MS SQL Server和MySQL上使用数据库生成的GUID字符串。本地人根据底层数据库的功能选择标识,序列或hilo。分配让应用程序在调用save()之前为对象分配标识符。如果未指定任何元素,则这是默认策略。选择检索由数据库触发器分配的主键,方法是通过某个唯一键选择行并检索主键值。国外使用另一个关联对象的标识符。它通常与主键关联一起使用。序列同一性一种专门的序列生成策略,它利用数据库序列进行实际值生成,但将其与JDBC3 getGeneratedKeys结合使用,以返回生成的标识符值作为insert语句执行的一部分。仅在针对JDK 1.4的Oracle 10g驱动程序上支持此策略。由于Oracle驱动程序中的错误,对这些插入语句的注释被禁用。如果你正在构建一个没有多少并发用户的简单应用程序,你可以去增量,身份,hilo等。这些很容易配置,并且在db中不需要太多编码。您应该根据数据库选择序列或guid。这些安全且更好,因为id生成将在数据库内部发生。更新: 最近我们遇到了一个idendity问题,其中基本类型(int)通过使用warapper类型(整数)来修复。