native只支持数据库自带的主键管理模式,一般是自增长。学号到底是什么类型的?如果是String 型的话 type="java.lang.Integer"在映射就有问题。
另外,
要hibernate管理你的主键的话就不能选择那些手工输入的字段(即与业务相关的字段,如学号)作为主键,而需要建立一个和业务无关的字段。
你可以在类中(可能是Student)新加一个Integer字段id,然后
<id   name="stuId"   type="java.lang.Integer"> 
      <column   name="id"   /> 
      <generator   class="native"   /> 
</id>
在程序中不同写stu.setId(1).因为在stu.save()时会自动帮你设置一个id值赋予stu。
也就是说在stu.save()之前,stu.getId()结果是null;而stu.save()之后stu.getId()结果是某一个Integer的数值
 

解决方案 »

  1.   

    在数据库中新建索引,选择学号,同时选择“唯一”。所谓“唯一”就是唯一性约束了。另外一种方法,
    HIBERNATE隐射文件中
    <property name="stuId" column="stuId" type="string" unique="true" />然后设置让hibernate字段生成表,则在数据库中会自动帮你建立一个索引,即对学号的唯一性约束。
      

  2.   

    你自己的程序管理主键,就不需要hibernate 替你 generate了. 呵呵!   
      

  3.   

    <generator       class="native"       />
    是在你没有给定pk值的时候才会发生做用,有两种,一个是在你没有给定的时候进行自增长,一个是不进行任何处理!
    然而在你的处理过程中,这句话是不发挥作用的!但是你的学号到底是什么类型的?如果是String   型的话   type="java.lang.Integer"在映射就有问题。 要hibernate管理你的主键的话就不能选择那些手工输入的字段(即与业务相关的字段,如学号)作为主键,而需要建立一个和业务无关的字段。 
    你可以在类中(可能是Student)新加一个Integer字段id,然后 
    <id       name="stuId"       type="java.lang.Integer">   
                <column       name="id"       />   
                <generator       class="native"       />   
    </id> 
    在程序中不同写stu.setId(1).因为在stu.save()时会自动帮你设置一个id值赋予stu。 
    也就是说在stu.save()之前,stu.getId()结果是null;而stu.save()之后stu.getId()结果是某一个Integer的数值 以上同意lailai_yyl的看法!
      
      

  4.   

    自己管理的话可以用 <generator class="assigned" />
      

  5.   

    用   <generator   class="assigned"   /> 
      

  6.   

    谢谢问题解决了  用<generator  class="assigned"   />