我正在阅读一些旧代码并注意到如果我想从数据库中检索对象我刚刚使用:
Session session=mainApp.getSessionFactory().openSession();
session.beginTransaction();
State newState=(State) session.get(State.class, state);
todoHistory.setState(newState);
session.update(todoHistory);
session.getTransaction().commit();
session.close();
现在我会使用类似的东西:
Session sess = mainApp.getSessionFactory().openSession();
System.out.println("Session opened!");
Transaction tx = null;
try {
tx = session.beginTransaction();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<State> query = builder.createQuery(State.class);
Root<State> root = query.from(State.class);
query.select(root);
List allStates = session.createQuery(query).list();
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
System.out.println(e);
throw e;
}
finally {
sess.close();
System.out.println("Session closed!");
}
请注意,第一个代码块中没有try/catch
块。如果您想从数据库中检索对象,或者第一个块的示例是否正确,我是否需要构建条件?另外,如果我从数据库中检索对象并将其传递给其他函数,我可以在那里更新它,还是应该只在同一个会话中进行检索和更新?