<id name="name" type="java.lang.String">这个是表的主件,你要认真的看书上说的,作为主件能是String的吗?,并且作为主件,书上不是说主件不要跟业务有关联吗?你的name就跟业务有关联了,我不知道说对了没有,你浪你的id 作为主件就可以的!!!

解决方案 »

  1.   

    <id name="name" type="java.lang.String">
                <column name="name" length="50" />
                <generator class="native" />
     </id> 
    String 怎么增长?
    mysql用int autoincrement
    type="java.lang.Integer",这样可以实现数据库本地自增长
      

  2.   

    我说是ID自动增加,而ID不是主键,name是主键,name不自动增加啊,当然可以用 string了
      

  3.   

     将 <generator class="native" /> 改为
    <generator class="identity" />
    试试!
      

  4.   

    按照楼上的方法做了,结果还是一样,同样报下面的错误
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'shopmember' 中的标识列插入显式值。
    com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
      

  5.   

    建议楼主找个主键增长方式是String的,你的主键是String,那就只能由客户端来输入,而不能自动增长!
      

  6.   

    这么写试试
    <hibernate-mapping> 
        <class name="com.wy.dao.Shopmember" table="shopmember" schema="dbo" catalog="shopping" dynamic-insert="true" dynamic-update="true"
            <id name="name" type="java.lang.String"> 
                <column name="name" length="50" /> 
                <generator class="native" /> 
            </id> 
            <property name="id" type="java.lang.Integer"> 
                <column name="id" /><!--not-null="true" 去了--> 
            </property> 
            <property name="password" type="java.lang.String"> 
                <column name="password" length="50" /> 
            </property>
      

  7.   

     <generator class="native" /> 
    native方式的主键只能是int类型不要把String类型的name作为主键
      

  8.   

    用hibernate的话,最好不要用数据库的自增功能。用hibernate的increment 
      

  9.   

    id不可以为空,但我在数据库中设置的为自动增加的
    把自动增量去掉,然后添加数据改用存储过程,每次将最大的id+1再存储。
      

  10.   

    那就将主键设置成指派的方式:
    <id name="name" type="java.lang.String"> 
                <column name="name" length="50" /> 
                <generator class="assigned" /> 
    </id>
    不过怎样你要自己在程序中给name赋值,并且保证唯一。
      

  11.   

    楼主何不换一种方式去做呢!~!
    你将id设为主键,并且是自动增长的,
    然后把name设置成唯一的,也许这才是比较好的做法!~!
    这样就很容易的解决问题了啊!~!
      

  12.   

    ID自动增加.在<class name="id" ><generator class="sequence"></generator ></class>这是oracle的,
    你的如果是mysql就是在generator标签中class="native"
    这样就能,好想是这样的!!
      

  13.   

    <generator class="sequence"> 
      

  14.   

    <id name="name" type="java.lang.String"> 
                <column name="name" length="50" /> 
                <generator class="increment" /> 
            </id> 
    只有是设置主键自动增长的
      

  15.   

            <id name="name" type="java.lang.String"> 
                <column name="name" length="50" /> 
                <generator class="native" /> 
            </id> 老大  别冲动  String   你怎么增长???  除非你是这样  在插入一次之前先查询上一个的值  然后再生成要插入的id 才有可能成功插入不过中间假如有删除你就惨了
    比如说 1500后面本来有1501的  但是你把他删了结果  你查询了1500 然后通过id生成器又生成了1501。
      

  16.   

    <hibernate-mapping> 
        <class name="com.wy.dao.Shopmember" table="shopmember" schema="dbo" catalog="shopping"> 
            <id name="id" type="java.lang.Integer"> 
                <column name="id" length="50" /> 
                <generator class="sequence">
                    <param name="sequence">SEQ_XXXXX</param>
                </generator>     
            </id> 
            <property name="name" type="java.lang.String"> 
                <column name="name" not-null="true" /> 
            </property> 
            <property name="password" type="java.lang.String"> 
                <column name="password" length="50" /> 
            </property>这样改 就行了 把id设为主键