想生成如下表:id identity(1,1)
rid int  pk在hbm.xml里面可以通过<generator class="assigned">生成rid主键,
但是自增列id如何生成呢?

解决方案 »

  1.   

    主键可以有一下两种方式设置自动曾长:
    Identity  :  根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式。 
    特点:与底层数据库有关,要求数据库支持Identity,如MySQl中是auto_increment, SQL Server 中是Identity,支持的数据库有MySql、SQL Server、DB2、Sybase和HypersonicSQL。 Identity无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。Increment :  对主键值采取自动增长的方式生成新的主键值,但要求底层数据库的支持Sequence。如Oracle,DB2等。需要在映射文件xxx.hbm.xml中加入Increment标志符的设置。 
    特点:由Hibernate本身维护,适用于所有的数据库,不适合多进程并发更新数据库,适合单一进程访问数据库。不能用于群集环境。主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据
    库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。至于你的问题,我觉得可以把他们两个做复合主键...
      

  2.   

    identity  这个只针对sqlserver
    native     这个针对大多数现在流行的数据库
    increment  这个是hibernate 帮你生成的,会在每次分配的时候去查一下数据库。