是否有一些Hibernate的主键生成器(例如“已分配”或“身份”)我可以自己设置id,还是hibernate生成它?
答案 0 :(得分:4)
Hibernate提供了各种id生成技术。
以下是hibernate中一些常用生成器的列表:
增量:它生成long,short或int类型的标识符,仅当没有其他进程将数据插入同一个表时才是唯一的。它不应该在集群环境中使用。
身份:它支持DB2,MySQL,MS SQL Server,Sybase和HypersonicSQL中的标识列。返回的标识符的类型为long,short或int。
序列:序列生成器使用DB2,PostgreSQL,Oracle,SAP DB,McKoi中的序列或Interbase中的生成器。返回的标识符的类型为long,short或int
hilo :hilo生成器使用hi / lo算法有效地生成long,short或int类型的标识符,给定表和列(分别默认为hibernate_unique_key和next_hi)作为源嗨值。 hi / lo算法生成仅对特定数据库唯一的标识符。请勿将此生成器与JTA或用户提供的连接一起使用。
seqhilo :在给定命名数据库序列的情况下,seqhilo生成器使用hi / lo算法有效地生成long,short或int类型的标识符。
uuid :uuid生成器使用128位UUID算法生成字符串类型的标识符,在网络中是唯一的(使用IP地址)。 UUID编码为长度为32的十六进制数字字符串。
guid :它在MS SQL Server和MySQL上使用数据库生成的GUID字符串。
native :它根据底层数据库的功能选择标识,序列或hilo。
已分配:允许应用程序在调用save()之前为对象分配标识符。如果未指定任何元素,则这是默认策略。
选择:通过按某个唯一键选择行并检索主键值来检索数据库触发器分配的主键。
foreign :使用其他关联对象的标识符。通常与主键关联一起使用。 相关链接谷歌
答案 1 :(得分:2)
您可以使用Guids,或者查看Hi Low算法。这允许每个客户端维护一个id块供使用。
Guids可能是产生自己的最佳选择,因为它们具有全球独特性。
将映射保持为“已分配”,并在持久化之前在实体上设置Guid。