JAVA冬眠。org.hibernate.StaleStateException:批处理更新从更新[0]返回意外的行数;实际行数:0;预期:1

JAVA冬眠。org.hibernate.StaleStateException:批处理更新从更新[0]返回意外的行数;实际行数:0;预期:1,java,mysql,hibernate,Java,Mysql,Hibernate,我刚开始冬眠。 现在正在处理来自web的示例。 我有一个MySQL数据库,其中包含一些表,包括表“profession”。此表有两个列:profession\u id(自动递增)和profession\u name 在java项目中,我有一个“Test”类,它包含几个表处理方法和“main”方法。 处理方法如下: private void addProfession(String name) { Session session = HibernateUtil.getSessionFact

我刚开始冬眠。 现在正在处理来自web的示例。 我有一个MySQL数据库,其中包含一些表,包括表“profession”。此表有两个列:profession\u id(自动递增)和profession\u name

在java项目中,我有一个“Test”类,它包含几个表处理方法和“main”方法。 处理方法如下:

private void addProfession(String name) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Profession r = new Profession();
    r.setProfessionName(name);
    session.save(r);
    session.getTransaction().commit();
}

private ArrayList<Profession> getProfessions() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    ArrayList<Profession> result = (ArrayList<Profession>) session
            .createQuery("from Profession order by professionName").list();
    session.getTransaction().commit();
    return result;
}

private void deleteProfessions(ArrayList<Profession> result) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    for (Profession p : result) {
        System.out.println("Delete: " + p.getProfessionId() + ": " + p.getProfessionName());
        session.delete(p);
    }
    session.getTransaction().commit();
}

private void deleteEntity(Object object){
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    session.delete(object);
    session.flush();

    session.getTransaction().commit();

}
在stackoverflow上阅读了几个关于这个主题的主题后,我了解到这个问题不知何故与ids有关。因此,我决定对这段代码进行注释:

test.deleteEntity(result.get(0));
从那以后一切都很顺利

因此,问题是: 如果我需要: 1.删除其中一行('因为当我删除例如result.get(3)等时,这个问题也会发生)。
2.删除剩余的行。

删除特定的
专业后
也将其从
数组列表中删除。比如说

    test.deleteEntity(result.get(0));
    result.remove(0);
这应该能解决你的问题。

真丢人!:)非常感谢你。Upd:第二种方法(我在示例中没有注意到)是通过添加以下
result=test.getProfessions()来更新结果列表
test.deleteEntity(result.get(0))之后
test.deleteEntity(result.get(0));
    test.deleteEntity(result.get(0));
    result.remove(0);