[code="java"]
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;
}
}
[/code]
[color=blue] 请问一下 这样要怎么 查询它呢, 它返回的结果类型的List的, 我需要用一个集合来遍历,请问一下需要怎么做呢?
还有一个问题[/color]
[code="java"]
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;
}
}
[/code]
[color=blue] 比如调用它的delete方法 也是必须要用Transaction 然后再执行commit才能执行删除吗? 如果有对这方面了解的麻烦帮下忙,谢谢各位了[/color]
问题1:
你可以这样遍历:
for(User user:list){
/**你的操作*/
}
问题2:
如果你使用的是Hibernate,没使用spring,你的hibernate.cfg.xml的相关配置中,一般情况下是没有设置手工提交,默认的是自动提交。
如果使用了spring,则配置文件中会有如下语句:
,可见你已你已把默认提交开启,为自动提交方式,如果是false,则为手工提交方式。
如调用它的delete方法 不须要用Transaction 然后再执行commit才能执行删除,数据库的更新操作(add,delete,update),也可不用事务的commit。
用事务只是把对数据库的操作一次性提交,add,delete,update进行的操作已经提交,在事务执行中如果有错误就进行回滚,所以说用事务让数据更加安全,不会导致数据的丢失。
问题1:
这样遍历
[code="java"]
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
User user = (User) list.get(i);
}
}
[/code]
问题2:
如果使用了Spring来管理事务的话,默认不用手工关闭连接、不用手工提交
如果只单独使用Hibernate,默认是自动提交的,也不用手工提交,即不用commit
如果使用了事务,会通过设置connection.setAutoCommit(false);设置为手工提交方式,然后要事务的最后手工提交connection.commit();