当前位置:编程学习 > JAVA >>

帮忙看个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.update(board);
tx.commit();
--------------------编程问答-------------------- 学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate? --------------------编程问答-------------------- 使用hibernate的session操作数据库,进行数据库写操作时,应该操作之前开启事务,操作之后关闭事务。 --------------------编程问答--------------------
引用 1 楼 fudongrifdr 的回复:
第8行代码 session.update(board);
前后加上事务
Transaction tx=session.beginTransaction();
session.update(board);
tx.commit();

说的有道理 --------------------编程问答--------------------
引用 2 楼 qust_2011 的回复:
学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?

DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession(); --------------------编程问答--------------------
引用 4 楼 baohuan_love 的回复:
Quote: 引用 1 楼 fudongrifdr 的回复:

第8行代码 session.update(board);
前后加上事务
Transaction tx=session.beginTransaction();
session.update(board);
tx.commit();

说的有道理

--------------------编程问答--------------------
引用 5 楼 baohuan_love 的回复:
Quote: 引用 2 楼 qust_2011 的回复:

学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?

DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession();

为什么不直接用hibernate模板方法getHibernateTemplate,这样不需要再开启、关闭事务了 --------------------编程问答--------------------
引用 7 楼 qust_2011 的回复:
Quote: 引用 5 楼 baohuan_love 的回复:

Quote: 引用 2 楼 qust_2011 的回复:

学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?

DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession();

为什么不直接用hibernate模板方法getHibernateTemplate,这样不需要再开启、关闭事务了

因为有些写数据库的操作必须在事务管理模式下完成,比如写oracle的大数据字段blob. --------------------编程问答--------------------
引用 8 楼 baohuan_love 的回复:
Quote: 引用 7 楼 qust_2011 的回复:

Quote: 引用 5 楼 baohuan_love 的回复:

Quote: 引用 2 楼 qust_2011 的回复:

学习,这里session怎么获取的?为什么说这段代码错误使用了Hibernate?

DAO里调用getHibernateTemplate()这个知道吧,session可以这样获取:
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session si = sf.getCurrentSession();

为什么不直接用hibernate模板方法getHibernateTemplate,这样不需要再开启、关闭事务了

因为有些写数据库的操作必须在事务管理模式下完成,比如写oracle的大数据字段blob.

事务当然还要用的,直接用getHibernateTemplate.save(),配spring声明式事务,这样呢
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,