sqlserver中已经设置id为自增主键hbm文件中关于id字段的定义:
<id name="id" type="integer">
            <column name="id" />
            <generator  class="assigned"/>
        </id>如果我这样写:
VoteDAO dao=new VoteDAO();
 Vote vote=new Vote();  
 String txtvote="不能说";
  vote.setItem(txtvote); System.out.println(vote.getItem());
dao.getSession().beginTransaction().begin();
dao.getSession().saveOrUpdate(vote);
dao.getSession().beginTransaction().commit();
报如下异常:
ids for this class must be manually assigned before calling save(): 
com.zjw.model.Vote如果我这样写:
VoteDAO dao=new VoteDAO();
 Vote vote=new Vote();  
 String txtvote="不能说";  vote.setId(19);
  vote.setItem(txtvote); System.out.println(vote.getItem());
dao.getSession().beginTransaction().begin();
dao.getSession().saveOrUpdate(vote);
dao.getSession().beginTransaction().commit();
报如下异常:
当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'vote' 中的标识列插入显式值。
设置id不行,不设置也不行,两难了!
不是说assigned是指外部程序来负责吗?

解决方案 »

  1.   

    因为你ID设成自增了.所以不能手动设置ID的.
    如果是使用序列自增
    <generator  class="assigned"/>
    改为<generator class="sequence">
    <param name="sequence">序列名称</param>
    </generatror>
      

  2.   

    改成sequence会出下面的错误
    %%%% Error Creating SessionFactory %%%%
    到底怎么样才能解决这个问题呢
      

  3.   

    id报错 <(id) name="id" type="integer">
                <column name="id" />
                <generator  class="sequence"/>
                <param name="sequence">id</param>
            </id>
      

  4.   


    <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator  class="identity"/>
            </id>"java.lang.Integer"对应的自增类型是“identity”
    "assigned"是对应varchar类型
      

  5.   

    <generator  class="native"/>
      

  6.   

    sqlserver中已经设置id为自增主键,配置文件也设为自增的.
    id为自增主键就只能由数据库维护.
      

  7.   

    <generator  class="native"/>设置这个主键策略就可以了
      

  8.   

    <generator  class="native"/>   我试过不行.<generator  class="identity"/>  我改过这个也出错,按着用技术创造艺术的方法就可以了
    非常感谢 用技术创造艺术 再问个问题写Integer就会报错   为什么必须得写成java.lang.Integer  呢
    <id name="id" type="java.lang.Integer">
      

  9.   

    换成Integer看行不行吧,不知道这里对大小写是否敏感,楼主结贴给分阿
      

  10.   

    把id改成varchar(33)
    <generator  class="uuid.hex"/>
    不用SETID了
      

  11.   

    当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'z_GoodsInfo' 中的标识列插入显式值。我在浏览器查看时,发生的错误
      

  12.   

    我没有看到<id   name= "id "   type= "java.lang.Integer "> 
                            <column   name= "id "   /> 
                            <generator     class= "identity "/> 
                    </id> 
    这些代码呀,怎么看呀,请指教一下