帮忙看个Hibernate题目
指出一下代码哪里错误使用了Hibernate。背景简介:Board是一个实体类,id是它的主键,name和description是他的两个属性。BoardDao是Board实体的数据访问对象,BoardBo是业务对象,用户提交变更Board对象的请求,由Struts的BoardAction接收,调用BoardBo处理。HibernateUtil.currentSession()用于返回当前请求的Session对象。
1. //数据访问层代码:BoardDao.java
2. public Board loadBoard(Long id) {
3. Session session = HibernateUtil.currentSession();
4. return session.load(Board.class, id);
5. }
6. public void updateBoard(Board board) {
7. Session session = HibernateUtil.currentSession();
8. session.update(board);
9. }
10.
11. //业务对象层代码:BoardBo.java
12. private BoardDao boardDao;
13. public void updateBoard(Long id, String name, String description) {
14. Board board = boardDao.loadBoard(id);
15. board.setName(name);
16. board.setDescription(description);
17. boardDao.updateBoard(board);
18. }
19.
20. //Web控制器代码:BoardAction.java
21. private BoardBo BoardBo;
22. public ActionForward execute(
23. ActionMapping mapping,
24. ActionForm form,
25. HttpServletRequest request,
26. HttpServletResponse response) throws Exception {
27. String id = request.getParameter("id");
28. String name = request.getParameter("name");
29. String description = request.getParameter("description");
30. boardBo.updateBoard(id, name, description);
31. return mapping.findForward("update-success");
32. } --------------------编程问答-------------------- 第8行代码 session.update(board);
前后加上事务
Transaction tx=session.beginTransaction();--------------------编程问答-------------------- 学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate? --------------------编程问答-------------------- 使用hibernate的session操作数据库,进行数据库写操作时,应该操作之前开启事务,操作之后关闭事务。 --------------------编程问答--------------------
session.update(board);
tx.commit();
说的有道理 --------------------编程问答--------------------
DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession(); --------------------编程问答--------------------
--------------------编程问答--------------------
学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?
DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession();
为什么不直接用hibernate模板方法getHibernateTemplate,这样不需要再开启、关闭事务了 --------------------编程问答--------------------
学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?
DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession();
为什么不直接用hibernate模板方法getHibernateTemplate,这样不需要再开启、关闭事务了
因为有些写数据库的操作必须在事务管理模式下完成,比如写oracle的大数据字段blob. --------------------编程问答--------------------
学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?
DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession();
为什么不直接用hibernate模板方法getHibernateTemplate,这样不需要再开启、关闭事务了
因为有些写数据库的操作必须在事务管理模式下完成,比如写oracle的大数据字段blob.
事务当然还要用的,直接用getHibernateTemplate.save(),配spring声明式事务,这样呢
补充:Java , Java EE