这是hibernate的测试方法:
public void testHibernate() {
ContInfo ci = new ContInfo();
ci.setColKind("122");
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf = cfg.buildSessionFactory();
Session sess = sf.openSession();
Transaction t = sess.beginTransaction();
sess.save(ci);
t.commit();
sess.close();
}
其中ContInfo有个主键SN是通过native方法生成的,该方法可以成功插入。
但集成到spring,stuts时,使用extends HibernateDaoSupport,在action中用到save方法保存数据,但jsp页面上运行后就出错了。
原因是没有使用native生成主键,即没有执行一下这步:
Hibernate: 
    select
        hibernate_sequence.nextval 
    from
        dual
所以问题出来了,怎么让spring使用native方法,可能表达方式不一,总之也要让它在页面上自动生成主键插入数据!

解决方案 »

  1.   

    按说和不用spring没有区别。只要你pojo类的<hibernate-mapping>文件里,id节点有一个<generator class="native" />,都会用native方式产生主键。
    你这里用的是sequence,而native是根据底层数据库自动判断使用identity,sequence,或hilo中的一个。你不妨直接写成sequence。
      

  2.   

    我试了,从native改成sequence,再重新导入表后,直接用hibernate测试可以,
    但运行tomcat后,就出现了异常了:
    Caused by: org.hibernate.MappingException: could not instantiate id generator
    Caused by: org.hibernate.MappingException: Dialect does not support sequences
      

  3.   

    LZ你用sequence是否建立了触发器和序列,我一直都是在用sequence生成主键的,没问题啊,你用什么数据库
      

  4.   

    Dialect does not support sequences
    你的数据库Dialect写错了吧?你用的什么数据库?
      

  5.   

    真是严重失误了,是更改原先的mysql的项目时dialect没修改,搞晕了以为spring怎么了,改了后可以了,结贴了