锁定老帖子 主题:关于DAO API的取舍
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-08
Dao 中没有 session.close() 的语句确定没有问题么?
我能查到的 Dao 编程中,有很多都没见到关闭 Session 的语句, 确定这样没有问题么? 但是如果,dao中有关闭session的语句的话,如何能保证数据的完整性? 比如,有一数据的必须同时保存在几张表内,如果有一个错误就必须回滚 如果每张表都有一个 dao , dao内又有session.close,那么就不能做到数据的完整性了 因为有部分数据已经存储了 比如存储了主表的数据,但是细表的数据没有存储 |
|
返回顶楼 | |
发表时间:2005-03-08
推荐楼主看看这个帖子后面的讨论:
http://forum.iteye.com/viewtopic.php?t=10972 |
|
返回顶楼 | |
发表时间:2005-03-08
liang_chen 写道
呵呵,这个Command模式的已经推了很久了,不过好像还没看到什么很好的使用 我觉得DAO层难以避免,在Hibernate的情况DAO层起到的主要作用就是对于此PO的查询,毕竟这些大多数是需要通过HQL来实现的,另外一个作用我觉得是软件体系中的层次分离,DAO层作为数据源层,而之上的Domain Model层与之通讯而已,如果将HQL放入Domain Model,系统的结构一定层次上来说就变得有些混乱。 |
|
返回顶楼 | |
发表时间:2005-03-15
实现一个model-hql转换器很复杂吗????
|
|
返回顶楼 | |
发表时间:2005-04-08
inteface MessageDAO{
public void saveMessage(Message message); public void deleteMessage(Integer id); } public class MessageDAOImpl implement MessageDAO{ private Session sessioin; //getter setter method for the session public void saveMessage(Message message){ session.save(message); } public void deleteMessage(Integer id){ session.delete(Message.class, id); } } interface MessageService{ public void doSomething(); } public class MessageServiceImpl implement MessageService{ private MessageDAO dao; // getter setter method for the dao public void doSomething(){ Session session = HibernateSessionFactory.openSession(); ( (MessageDAOImpl)dao).setSession(session); try{ Transaction tx = session.beginTransaction(); Message message = new Messeage(); dao.save(Message); dao.delete(Message.class,new Integer(1)); session.commit(); }catch(HibernateException e){ if (tx!=null){ tx.rollback; }finally{ session.close(); } } } } public class Test{ public static void main(String[] args){ MessageService service = new MessageServiceImpl(); MessageDAO dao = new MessageDAOImpl(); service.setDAO(dao); service.doSomething(); } } Service 层要控制事务就需要得到一个session。这样感觉DAO层就没有必要。 感觉很别扭。直接在Service上写就行了。实在是不知道怎么办。以前都是用spring来整合hibernate的。难道没有了spring,hibernate就不能使用DAO了吗? 好迷茫! |
|
返回顶楼 | |
发表时间:2005-04-09
有时候写的DAO简直就是浪费生命.比如说有StydentDao,还有TeacherDao什么的.但是其实代码也差不多,完全可以把一个dao完全复制过去,然后查找->修改,把原来的student全部修改成为teacher,没有任何问题,反正我自己搞的全部都是这样
记得原来看的C++的书是<<modern C++ design>>,里面的对于泛型的使用真是令人惊叹.倒是也容易让人又回到复杂的语言层次的东东了,技术是很好,但是太负责了,呵呵 但是如果在dao中使用泛型的话,倒是符合泛型的本来的意图,避免无意义重复代码.从一个泛型dao组件派生出来大多数的可用dao组件,但是一直没有机会用java的泛型功能,什么时候一定要试试 |
|
返回顶楼 | |