问题描述
public List findAll() {log.debug("finding all User instances");try {String queryString = "from User";Query queryObject = getSession().createQuery(queryString);return queryObject.list();} catch (RuntimeException re) {log.error("find all failed", re);throw re;}} 请问一下 这样要怎么 查询它呢, 它返回的结果类型的List的, 我需要用一个集合来遍历,请问一下需要怎么做呢?还有一个问题public void delete(User persistentInstance) {log.debug("deleting User instance");try {getSession().delete(persistentInstance);log.debug("delete successful");} catch (RuntimeException re) {log.error("delete failed", re);throw re;}} 比如调用它的delete方法 也是必须要用Transaction 然后再执行commit才能执行删除吗? 如果有对这方面了解的麻烦帮下忙,谢谢各位了
解决方案
问题1:你可以这样遍历:for(User user:list){ /**你的操作*/}问题2:如果你使用的是Hibernate,没使用spring,你的hibernate.cfg.xml的相关配置中,一般情况下是没有设置手工提交,默认的是自动提交。 如果使用了spring,则配置文件中会有如下语句:<property name="defaultAutoCommit" value="true"></property>,可见你已你已把默认提交开启,为自动提交方式,如果是false,则为手工提交方式。 如调用它的delete方法 不须要用Transaction 然后再执行commit才能执行删除,数据库的更新操作(add,delete,update),也可不用事务的commit。 用事务只是把对数据库的操作一次性提交,add,delete,update进行的操作已经提交,在事务执行中如果有错误就进行回滚,所以说用事务让数据更加安全,不会导致数据的丢失。
解决方案二:
问题2:如果使用了Spring来管理事务的话,默认不用手工关闭连接、不用手工提交如果只单独使用Hibernate,默认是自动提交的,也不用手工提交,即不用commit如果使用了事务,会通过设置connection.setAutoCommit(false);设置为手工提交方式,然后要事务的最后手工提交connection.commit();
解决方案三:
问题1:这样遍历if (list != null && list.size() > 0) {for (int i = 0; i < list.size(); i++) {User user = (User) list.get(i);}}