这个问题我以前也遇到的,我是把他改成sequence,然后指定你在oracle所定义的sequence的名字
例如:
<id name="id" column="ID" type="java.lang.Integer" unsaved-value="null">
     <generator class="sequence"> 
           <param name="sequence">GMCC_FAQ_ID</param> 
     </generator>
</id>我也不知道为什么不能用native,可能是hibernate里面对sequence的命名有一个默认值吧,这是我的猜测,要看源码才能知道的,目前在做项目没时间看源码。有知道的说一下了。我也是初学hibernate,以后有问题一起讨论呀:)

解决方案 »

  1.   

    多谢两位阿,我定义一个sequence,也通过。按native的本意,是不是如果连接oracle就用sequence,如果只是很简单的表,那不是很烦。能不能用其他策略?
      

  2.   

    哦,log里有这么一句,Hibernate: select hibernate_sequence.nextval from dual,看来用native是默用sequence,或者是不是在hibernate的配置文件里是不是有设置的,去看看,呵呵。
      

  3.   

    把sequence生成方式设置成native,你就不用再搭理它了。不同的数据库hibernate会自动调整:<id name="id" column="ID" type="long" unsaved-value="null">
      <generator class="native"/>
    </id>
      

  4.   

    不用,可以用    <id
            name="iccardno"
            type="java.lang.String"
            column="ICCARDNO"
        >
            <generator class="assigned" />
        </id>
      

  5.   

    对于Oracle数据库要使用native作为Hibernate主键映射策略,与其它数据有所不同,一定要建立一个全局的序列sequence,而且这个sequence名唯一hibernate_sequence,这是hibernate默认的序列名称,不能更改