你其实是利用的数据库自身的id生成机制
你可以使用native,这样hibernate会根据数据库适配器中的定义去选择,对于oracle你可以用sequence,这是采用oracle sequence机制。
当然采用这些大批量的插入数据会降低效率,最好采用uuid.hex,由hibernate产生id。

解决方案 »

  1.   

    除了把id设为sequence,还有一些设置吧,否则光有这个配置,oracle自己怎么知道去自增?难道hibernate会自动在oracle中创建一个序列与之对应?用sql都有一个seq_name.nextval啊
    另外,uuid.hex产生的是一个很长的随机数吧,不符合自增的要求
      

  2.   

    定义一个 sequence,比如名字为 index_id,
    在 插入数据的时候,主键列 的值为 index_id.nextval
      

  3.   

    大多数情况下,可用
    <generator class="native" /> Oracle 用sequence比较常见
      

  4.   

    我也遇到过这个问题,老师也不知道,于是当时自定ID的值。
    现在该学习学习sequence了。
      

  5.   

    <hibernate-mapping>
      <class name="..." table="CHILD">  //把java class对应到database table中
        <id name="id" unsaved-value="0">//主键描述
          <generator class="sequence">//采用oracle的sequence技术自动自增主键
            <param name="sequence">SEQ_CHILD</param>
          </generator>
        </id>
    SEQ_CHILD是你定义的序列名
      

  6.   

    当然要在oracle数据库里为每个表创建sequence了。配置文件指定此sequence名。
    让hibernate在oracle创建sequence不是开玩笑吗!
      

  7.   

    不建序列,直接用
    <generator class="increment">
    也可以啊,只是不知道在并发上面会不会出问题
      

  8.   

    oracle也可用native,hibernate会生成一个hibernate_sequence,所有的序号都用它生成。
      

  9.   

    楼上正解。sequence不用自己生成(那样好麻烦....)