你的Guestbook数据表里面的主健 id 是自增长的吗?极有可能使你忘了让它自增长了

解决方案 »

  1.   

    ls正解,要不你就把你的配置文件改成 <id name="id" type="java.lang.Integer"> 
                 <column name="id" /> 
                 <generator class="assigned" /> 
             </id> 试试,嘿嘿不过这样很容易主键冲突一般都不这么做
      

  2.   

      <id name="id" type="java.lang.Integer"> 
                 <column name="id" /> 
                 <generator class="native" /> 
             </id> 
    好像你不是设置自增的值吧?The database returned no natively generated identity value 翻译过来就是:数据库返回的不是一个自增的值.
      

  3.   


    映射<generator class="native" /> 不对,native是自动增长的
      

  4.   

    Exception in thread "main" org.hibernate.HibernateException: The database returned no natively generated identity value 
    这个说明你的主键生成机制有错误,native机制是根据数据库底层选择identity, sequence 或者hilo 的一种,
    对于MySql 选择的应该是identity,
    但是按你插入的方式,主键生成策略应该是assigned。
    你不妨试试。
      

  5.   

      <id name="id" type="java.lang.Integer">  
                  <column name="id" />  
                  <generator class="assigned" />  
              </id>  
      

  6.   


    既然你不想自动增长,就不要用native
      

  7.   

    gb.setId(711); 
    gb.setUsername("zhou"); 
    gb.setPassword("123"); 
    t.begin(); 
    session.save(gb); 
    t.commit();在插入时,gb.setId(711),这种做法是错误的,因为你的Guestbook.hbm.xml 
    中的id生成是native类型的,相对于mysql就是increase,相对于ORACLE就是suquence (哈,单词不会打了,就是mysql是自动增长,oracle是序列)
    就是说id由数据库自己生成,在插入时不能指定,一般在POJO中,都把setId设置为private不允许外界设置
    也就是说你在插入操作时,不需要setId: 
    gb.setUsername("zhou"); 
    gb.setPassword("123"); 
    t.begin(); 
    session.save(gb); 
    t.commit();
    即可
      

  8.   

    如果坚持要用native,那么把数据库表设置为ID自动增长试试看还有问题没
    不过如果是想自己设置ID才用的native,那么换:<generator class="assigned"/> 看看吧
      

  9.   

     <id name="id" type="java.lang.Integer"> 
                 <column name="id" /> 
                 <generator class="native" /> 
             </id> 
    NATIVE是根据数据库底层自动判断是使用identity\hilo\sequence,然后自动生成键值添加到数据库。不是你想填什么值就可以填的
    如果你想自己填值,就改成<generator class="assigned"/>
      

  10.   

    <generator class="native" /> 改成<generator class="assigned" /> 或者把 gb.setId(711);去掉
      

  11.   

    按你插入的方式,主键生成策略应该是assigned。 
      

  12.   

    多谢了,13楼,如果关键字是自己想生成的,就把 <generator class="assigned" />就好!烦了我好久了····
      

  13.   

    多谢各位的指点,我也是把<generator class="native" />改为<generator class="assigned" />就好了。