我正在将 Hibernate 与 JPA 带注释的实体一起使用,并且我希望更新实体的“raw_text
”字段的下一个代码不会更改它。如何实现预期的行为?
@Override
public void updatePageWithText(String pageName, String rawText) {
Session session = HibernateUtils.getInstance().openSession();
String hql = "FROM WikiPage M WHERE M.name = :name";
Query query = session.createQuery(hql);
query.setParameter("name",pageName);
WikiPage res = null;
try {
res = (WikiPage) query.list().get(0);
res.setRawText(rawText);
session.update(res);
session.flush();
}
catch (IndexOutOfBoundsException e) {}
finally {
session.close();
}
}
最佳答案
尝试以下操作:
@Override
public void updatePageWithText(String pageName, String rawText) {
Session session = HibernateUtils.getInstance().openSession();
Transaction transaction=session.beginTransaction();
String hql = "FROM WikiPage M WHERE M.name = :name";
Query query = session.createQuery(hql);
query.setParameter("name",pageName);
WikiPage res = null;
try {
res = (WikiPage) query.list().get(0);
res.setRawText(rawText);
transaction.commit();
}
catch (IndexOutOfBoundsException e) {
transaction.rollback();
}
finally {
session.close();
}
}
注意:
当您从查询中获取 WikiPage 时,它仍然是一个附加实体,因此您不需要触发 session.update()
、committing
交易
就可以了。
关于java - 无法使用 Hibernate 更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372340/