在Hibernate中数据库表主键,下面说法正确的是()
a。 ”increment“生成 long 、short 或 int 类型的主键
b。 ”native“根据具体连接的数据库从 identity、sequence或者hilo选择一种来生成主键
c。 ”uuid。hex“生成的主键只能适用于sql server 数据库
d。 ”uuid。hex“由 Hibernate 基于 128位UUID算法,生成16进制数值作为主键
a。 ”increment“生成 long 、short 或 int 类型的主键
b。 ”native“根据具体连接的数据库从 identity、sequence或者hilo选择一种来生成主键
c。 ”uuid。hex“生成的主键只能适用于sql server 数据库
d。 ”uuid。hex“由 Hibernate 基于 128位UUID算法,生成16进制数值作为主键
解决方案 »
- 字符串操作 aa,bb,cc,dd,cc,ee,ff=猪,狗,牛,羊,虎,鼠 我想得到aa=猪 bb=狗 cc=牛 dd=羊 ee=虎 ff=鼠 怎么做 ?
- 用hibernate3.0+sturts1.2做插入数据
- 在finalize方法中关闭数据库连接安全么?
- 求助!
- EJB到底是什么?
- 请问在web.xml中怎样表示所有url路径???急
- web.xml配置了applicationContext.xml,应该怎么去取已经实例化的bean?
- 100分!求List如何生成此数据结构
- 不用Struts框架在JSP里能不能用Struts标签?
- 请教,消息队列服务(JMS、Websphere MQ等)的适用场合有哪些?
- 一个关于响应用户请求的问题
- 大家来讨论一下Hibernate的关联关系什么时候使用合适呢
increment: 对 long , short 或 int 的数据列生成自动增长主键。
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实
例访问,此方式必须避免使用。
uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,这种方式我在开法过程中经常用到,意思是把主键的生成方式交给底层数据库来决定。
顺便罗列一下hibernate的主键生成机制,一共11种:-)
1、Assigned
主键由应用逻辑产生,数据交由hibernate时,主键值已经设置完毕,无需hibernate干预
2、hilo
通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。
3、seqhilo
与hilo相似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
4、increment
主键按数值顺序递增。此方式实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键时将此值加1作为主键。
这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一个数据库有多个实例访问时,此方式必须避免使用。
5、identity
采用数据库提供的主键生成机制,如SQL Server、MySQL中的自增主键生成机制。
6、sequence
采用数据库提供的sequence机制生成主键,如Oracle Sequence。
7、native
由Hibernate根据数据库适配器中的定义,自动采用identity、hilo、sequence的其中一种作为主键生成方式
8、uuid.hex
由hibernate基于128位唯一值产生算法,根据当前设备IP,时间,JVM启动时间,内部自增量等4个参数生成十六进制位数值(编码后以长度为32位的字符串表示)作为主键。
这种算法最大程度上保证了产生ID的唯一性,即使是在多实例并发运行的情况下。当然,重复的概率在理论上依然存在,只是实在过于渺茫(可能数万年才出现一次)。
一般而言,采用uuid.hex方式生成主键将提供最好的数据插入性能和数据平台适应性。
9、uuid.string
与uuid.hex相似,只是生成的主键未进行编码(长度16位)。在某些数据库中可能出现问题。如PostgreSQL
10、foreign
使用外部表的字段作为主键
11、select
Hibernate3中新加入的主键获取机制,主要针对遗留系统的改造工程。
在一些早期的工程中,主键可能依赖触发器生成,即当数据库发生insert操作时,通过触发器捕获这一操作,并为主键赋值。此时,我们就必须在插入数据之后,再次通过某一识别字段读取已插入的数据,获取其主键数据。常用的一般是uuid.hex,sequence,native