Session session = HibernateUtil.getTestSessionFactory().getCurrentSession();
    session.beginTransaction();
    session.save(test1);
    session.save(test2);
    session.save(test3);
    session.getTransaction().commit();
    WARN: SQL Error: 1062, SQLState: 23000
ERROR: Duplicate entry '9900001' for key 'PRIMARY'
WARNING: #{RmaBean.send}: org.hibernate.exception.ConstraintViolationException: Duplicate entry '9900001' for key 'PRIMARY'
javax.faces.FacesException: #{RmaBean.send}: org.hibernate.exception.ConstraintViolationException: Duplicate entry '9900001' for key 'PRIMARY'
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
因此,当尝试将 test1 插入 db 时,我总是会遇到该异常。在插入该 test1 之前,我填充了它的 PK,从 DB 中获取最后一个 PK 并将 +1 添加到其中。Hibernate 是否以某种方式将 pk 保存在内存中,我不应该使用插入而是更新?
更新:`
<class name="test1" table="test1" catalog="testing">
    <id name="testPK" type="long">
        <column name="testPK" />
        <generator class="assigned" />
    </id>`
这段代码是由另一个人实现的,我刚刚从 db 中检查了没有自动增量为真。已分配意味着我必须提供 PK 并且我正在尝试这样做。
public Integer getLastPK {
    Session session = HibernateUtil.getTestSessionFactory().getCurrentSession();
    Integer pk = null;
    try{
    session.beginTransaction();
    pk = new Integer(session.createSQLQuery("SELECT LAST_INSERT_ID() from testing.test1").uniqueResult().toString());  
    session.getTransaction().commit();
    System.out.println("1.....pk----------->"+pk);
    if(pk != null && pk <= 9900001){
        System.out.println("IF...");
        pk=9900001;
    }else if(pk != null && pk > 9900001){
        pk = pk+1;
    }
UPDATE2:我将 pk 更改为自动增量:
更改表testing。test1AUTO_INCREMENT = 9900001 ,更改列testPK testPKBIGINT(20) 非空 AUTO_INCREMENT ;
这是个好主意吗?我也更改了 hbm.xml 文件...
感谢您的帮助!萨米人