自己先顶一下,随便改改错.
A.java:
import java.io.Serializable;public class A implements Serializable {
  private AKey id;
  private String list; <--- private int list; 改错
  
  ....  //get,set方法省略
}

解决方案 »

  1.   

    SessionFactory factory = new Configuration.configure().buildSessionFactory();
    Session session = factory.openSession();
    Transaction insertentities = session.beginTransaction();
    A a = new A();
    AKey ak = new AKey();
    ak.setId(1);
    ak.setName("id");
    a.setId(ak);
    a.setList("test");
    session.save(a);
    session.flush();
    session.clear();
      

  2.   

    SessionFactory factory = new Configuration.configure().buildSessionFactory();
    Session session = factory.openSession();
    Transaction insertentities = session.beginTransaction();
    A a = new A();
    AKey ak = new AKey();
    ak.setId(1);
    ak.setName("id");
    a.setId(ak);
    a.setList(12323);
    session.save(a);
    session.flush();
    session.clear();
      

  3.   

    Akey类要重新定义 equals() 和 hashcode()方法
      

  4.   

    class AKey implements Serializable {
    private int id; private String name; public int getId() {
    return id;
    } public void setId(int id) {
    this.id = id;
    } public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public boolean equals(Object obj) {
    AKey tmp = (AKey)obj;
    if (tmp.getId()==this.id && this.name.equals(tmp.getName())) 
    return true;
    else
    return false;
    }

    public int hashCode() {
    return name.hashCode()+id;
    }}
      

  5.   

    不行啊,还是报同样的异常。
    我断点调试发现equals() 和 hashcode()根本没调用。
      

  6.   

    save的时候本来就不会调用啊equals() 和 hashcode()
      

  7.   

    property里没有指定属性对应的列column属性
    <hibernate-mapping default-lazy="false">
        <class name="A" table="A">
            <composite-id name="id" class="AKey">
            <key-property name="id" column="id" type="int"/>
            <key-property name="name" column="Name" type="string"/>
            </composite-id>
            <property name="list" type="int" column="list"/>
        </class>
    </hibernate-mapping>
      

  8.   

    <font color="red">我认为这里有问题,不知道对不对,关注……</font>
      

  9.   

    PopKaven(岁寒) :那是我笔误,谢谢你提出.
      

  10.   

    <hibernate-mapping package="com.pigo.hibernate">写上包名。
      

  11.   

    我是求用hibernate插入有联合主键的表数据的写法,谢谢合作.
    ^_^
      

  12.   

    Transaction insertentities = session.beginTransaction();
    A a = new A();
    AKey ak = new AKey();
    ak.setId(1);
    ak.setName("id");
    a.setId(ak);
    a.setList(12323);
    session.save(a);
    session.flush();
    session.clear();你clear干什么???你不commit,怎么插入??
    改成:
    session.save(a);
    session.flush();
    insertentities.commit();
      

  13.   

    原因就在于:在你未commit之前,hibernate是把你所想插入的数据放在session级的缓存当中(即内部缓存),你没commit之前,就把他clear了,它提交什么?
      

  14.   

    Transaction insertentities = session.beginTransaction();
    A a = new A();
    AKey ak = new AKey();
    ak.setId(1);
    ak.setName("id");
    a.setId(ak);
    a.setList(12323);
    session.save(a);
    session.flush();
    insertentities.commit();
    session.clear();
    一样抛出org.hibernate.StaleStateException异常:
    Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
      

  15.   

    不知道你的问题在哪了,会不会是有两个name是id有冲突??改下试试
    <hibernate-mapping default-lazy="false">
        <class name="A" table="A">
            <composite-id name="akey" class="AKey">
            <key-property name="id" type="int"/>
            <key-property name="name" type="string"/>
            </composite-id>
            <property name="list" type="int"/>
        </class>
    </hibernate-mapping>
    相应地
    public class A implements Serializable {
      private AKey akey;
      private String list;
      
      ....  //get,set方法省略
    }
      

  16.   

    还有,确认下你的表中id,name是不是都是主键?别搞了半天才发现有一个不是主键
      

  17.   

    主键是联合主键.
    两个name是id有冲突,这个没关系.
    查数据时都没问题.如果两个name是id有冲突,那么在查询的时候也会有问题的