当前位置:首页>开发>正文

hibernate主键生成策略 hibernate注解主键是什么

2023-06-06 21:34:51 互联网 未知 开发

 hibernate主键生成策略 hibernate注解主键是什么

hibernate主键生成策略

hibernate 主键生成策略有三种:序列 自增 通用
1、序列 sequence
只能在oracle 和 DB2中使用
<id name="id" column="id">
<generator class="sequence">
<param name="在数据库中创建的sequence名字"/>
</generator>
</id>
2、自增 identity
智能在sqlserver 和 mysql 中使用,同时建表的时候,设置列 为 auto increment。
<id name="id" column="id">
<generator class="identity"/>
</id>
3、通用 native
mysql 就用不了了
这个oracle中必须创建一个名字为 hibernate_sequence的序列。
<id name="id" column="id">
<generator class="native"/>
</id>

hibernate注解主键是什么

@Column(name="rightid")//对应数据库中的字段
@Id @GeneratedValue(strategy=GenerationType.AUTO)//设置主键,并说明增长方式
private Long id

Hibernate主键配置自增配置为什么赋不上值

Hibernate generator小结

“assigned”

主键由外部程序负责生成,在 save() 之前指定一个。

“hilo”

通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。

“seqhilo”

与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。

“increment”

主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。

“identity”

采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。

“sequence”

采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。

“native”

由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。

“uuid.hex”

由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

“uuid.string”

与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。

“foreign”

使用另外一个相关联的对象的标识符作为主键。

元素中的用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现。

Increment:由hibernate自动递增生成标识符,用于为long, short或者int类型生成唯一标识。
identity :由底层数据库生成标识符(自动增长),返回的标识符是 long, short 或者int类型的。
sequence :hibernate根据底层数据库序列生成标识符,返回的标识符 是long, short或者 int类型的。

hilo :使用一个高/低位算法来高效的生成long, short 或者int类型的标识符。
uuid.hex :用一个128-bit的UUID算法生成32位字符串类型的标识符。
native :根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
assigned :让应用程序在save()之前为对象分配一个标示符。
foreign :使用另外一个相关联的对象的标识符。和联合一起使用。

hibernate怎样改变主键值?

这个问题就复杂了,也就是说我们每个对象的主键值都不是纯数字。那么hibernate怎样将这个主键写入数据库呢。 查了一些资料,也没有找到适合的解决办法,后来请教好友苏强终于解决问题了。呵呵,我想也许很多人都遇到过类似的问题,我就把它写出来了。方便大家参考,或有不同意见的朋友们讨论一下,具体的解决办法是: 1:s_userid 首先,要改的是hbm的配置文件,在第三行的地方写一个类,这个类将来会用于处理序列的问题,包括路径一定不要配错,第四行中的参数sequence的属性的值不要配错,就是你在数据库中的序列名字。 2:上面的问题改完了,接下来我们要来写这个类了。类的名字和路径不要写错,这个类要继承SequenceGenerator 。 public class MyKeyGenarator extends SequenceGenerator {
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
return "hello" result "haha"}} 程序中的result就是你返回来的序列,然后你可以对这个序列前后加任何的字符串了,随你了。呵呵呵!

最新文章

随便看看