JAVA冬眠。org.hibernate.StaleStateException:批处理更新从更新[0]返回意外的行数;实际行数:0;预期:1
我刚开始冬眠。 现在正在处理来自web的示例。 我有一个MySQL数据库,其中包含一些表,包括表“profession”。此表有两个列:profession\u id(自动递增)和profession\u name 在java项目中,我有一个“Test”类,它包含几个表处理方法和“main”方法。 处理方法如下: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
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);