在Hibernate中数据库表主键,下面说法正确的是()
    a。 ”increment“生成 long 、short  或 int 类型的主键
b。 ”native“根据具体连接的数据库从 identity、sequence或者hilo选择一种来生成主键
c。 ”uuid。hex“生成的主键只能适用于sql server 数据库
d。 ”uuid。hex“由 Hibernate 基于 128位UUID算法,生成16进制数值作为主键

解决方案 »

  1.   

    有没有人给说说啊? 进公司那么久一直做bpm  快把这个忘了。
      

  2.   

    increment
    increment: 对 long , short 或 int 的数据列生成自动增长主键。
    主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实
    例访问,此方式必须避免使用。
    uuid.hex
    由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
    native
    由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,这种方式我在开法过程中经常用到,意思是把主键的生成方式交给底层数据库来决定。
      

  3.   

    选择 a  b  d ?
      

  4.   

    b、d一定是对的。a的话我不确定,Long应该肯定是可以的,但是short和Integer我就不确定了。这种生成方式没用过,期待答案,持续关注中。
    顺便罗列一下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
      

  5.   

    晕 你是要答案 还是要方法啊 我给你个确定的 abcdefg... 够了吗 O(∩_∩)O哈哈~