session.beginTransaction(); // 开启事务
System.out.println("111111111111111111111");
session.update(usersVo); // 修改数据
System.out.println("222222222222222222222");
session.getTransaction().commit(); // 提交事务经过我的检验发现无法执行update函数的下一句输出,可以执行update函数上一句的输出。
我也在网上查看了相关问题都没有得到解决。MyEclipse也没有报错。其它配置也没问题。求解:
System.out.println("111111111111111111111");
session.update(usersVo); // 修改数据
System.out.println("222222222222222222222");
session.getTransaction().commit(); // 提交事务经过我的检验发现无法执行update函数的下一句输出,可以执行update函数上一句的输出。
我也在网上查看了相关问题都没有得到解决。MyEclipse也没有报错。其它配置也没问题。求解:
Hibernate: select usersvo0_.id as id0_, usersvo0_.name as name0_, usersvo0_.age as age0_, usersvo0_.tel as tel0_, usersvo0_.address as address0_ from yonghu.users usersvo0_这样报错?
package com.cn.dao;import java.util.List;import org.hibernate.Session;import com.cn.factory.HibernateSessionFactory;
import com.cn.vo.UsersVo;public class HibernateDao {
public void add(UsersVo usersVo) { // 添加数据的方法
Session session = // 调用HibernateSessionFactory的会话
HibernateSessionFactory.getSession();
try {
session.beginTransaction(); // 开启事务
session.persist(usersVo); // 将对象添加到数据库
session.getTransaction().commit(); // 提交事务
} catch (Exception e) {
session.getTransaction().rollback();// 回滚事务
} finally {
session.close(); // 关闭session
}
}
public void modifyUsers(UsersVo usersVo) { // 修改数据的方法
Session session = HibernateSessionFactory.getSession();
try {
session.beginTransaction(); // 开启事务
session.update(usersVo); // 修改数据
session.getTransaction().commit(); // 提交事务
} catch (Exception e) {
session.getTransaction().rollback();// 回滚事务
} finally {
session.close(); // 关闭session
}
}
// 从数据库中删除数据
public void delete(int id) {
Session session = HibernateSessionFactory.getSession();
try {
session.beginTransaction(); // 开启事务
UsersVo users = (UsersVo) session.get(UsersVo.class, id);
session.delete(users); // 删除删除数据行
session.getTransaction().commit(); // 提交事务
} catch (Exception e) {
session.getTransaction().rollback(); //回滚事务
} finally {
session.close(); // 关闭session
}
}
@SuppressWarnings("unchecked") // 根据ID查找数据
public UsersVo queryUsersById(int id) {
Session session = HibernateSessionFactory.getSession();
UsersVo users = (UsersVo) session.get(UsersVo.class, id);
return users;
} @SuppressWarnings("unchecked")
public List<UsersVo> showlist(String hql) { // 查找多挑数据
Session session = HibernateSessionFactory.getSession();
try {
session.beginTransaction(); // 开启事务
return session.createQuery(hql).list(); // 使用hql查询结果,返回List对象
} finally {
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
}
}
}就修改和添加的功能不能实现?
UsersVo usersVo = session.load(UserVo.CLass,userVoId);
userVo.setXX();
....
session.update(usersVo);
这样就可以更新对象了。usersVo 这个参数就是你选择要更新那个对象的ID。
如果你是在jsp页面的话 可以设置一个hidden域,隐藏id
<input type="hidden" value="${requestScope.user.id}"/>
如果只是junit测试的话 你就必须先把对象查出来,起码你的对象里得有一个id,表明他在数据库里存在呀
Session session = HibernateSessionFactory.getSession();
//int userVoId=usersVo.getId();
int userVoId=0;
UsersVo usersVo1 = (UsersVo) session.load(UsersVo.class,userVoId);
usersVo.setId(userVoId);
try {
session.beginTransaction(); // 开启事务
session.update(usersVo1); // 修改数据
session.getTransaction().commit(); // 提交事务
} catch (Exception e) {
session.getTransaction().rollback();// 回滚事务
} finally {
session.close(); // 关闭session
}
}照您那么改之后,出现这种情况:org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.cn.vo.UsersVo#0]
org.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:27)
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:128)
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:161)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
你页面上显示的信息在数据库中有以下几个字段:id/userName/age
然后你在页面上用c:if循环取值并打印显示出来 比如是<td>${bean.id}<td/><td>${bean.userName}<td/><td>${bean.age}<td/>
然后你要修改其中一条 你必须先写一个获取要修改对象的id值的方法 然后才能修改该id所对印的里面的数据
如果你没获取id 那程序怎么知道你要修改的是哪一条数据
Transient
Persistent
Detached
session.saveOrUpdate(usersVo1);