Person p = new Person();   
p.setName("haha");   
p.setAge(20);   
p.setSex("男");   
  
String hql = "INSERT INTO person(name,age,sex) VALUES(?,?,?)";   
Query q = session.createQuery(hql);   
q.setString(0, p.getName());   
q.setInteger(1, p.getAge());   
q.setString(2, p.getSex());   
q.executeUpdate();//错误就发生在这一行 这段代码换成:Person p = new Person();   
p.setName("haha");   
p.setAge(20);   
p.setSex("男"); Transaction tx = session.beginTransactioin();
Query q = session.save(p);
tx.commit;
session.close; 

解决方案 »

  1.   

    把数据库里的ID 设置成自动增长试试CREATE TABLE person   
    (   
        id INT identity(1,1) PRIMARY KEY,   
        name VARCHAR(20),   
        age INT,   
        sex VARCHAR(2)   
    ); 
      

  2.   

    <id name="id" type="java.lang.String">
         <column name="id" length="32" />
         <generator class="uuid.hex" />        
    </id>这个在什么时候都市可以的
      

  3.   

    记得把数据库的key 改为varchar
    对应的person 文件的id 该为String ,绝对OK.
      

  4.   

    person 的这个P应该是大写吧。你的类是这样定义的 是Person 不是person。insert into Person  ''''''我对这个也不熟,增加一个值我一般是用save方法你这一句要想正确也可以用SqlQuery 这个接口 
      

  5.   


    如果是sql server 就如引用上面的,那如果是oracle的话,就要在oracle设置序列如:
    create sequence 序列名 
    increment by 1 
    start with 1 
    nomaxvalue 
    nocycle;
      

  6.   

    不好意思,上午有点事出去了,没有及时回帖 抱歉
    先谢谢1楼的答复,那个方法我也试过并且成功了,我这里只是想试试这种用hql的方法
    也谢谢2楼的和7楼的,不过我这里用的是mysql,写法应该没错吧
    6楼说的我也试过 不过也没成功
    3楼说的这个方法我还在试 还没有出来 不知道哪里错了
    我再试试 谢谢你们了  希望继续有人能回答我的问题
      

  7.   

    SQL Server  好像才是identity  MySql 好像就是INCREMENT    Postgres和Oracle 是Sequence