论坛首页 Java企业应用论坛

如何让hibernate和struts结合

浏览 6218 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-10-22  
我现在用hibernate和struts结合开发网站系统,开发工具用的是eclipse。我现在有几个问题想问一下,毕竟可以节省许多时间(...怪笑...):
1、我在action中使用SessionFactory、Session、Transaction。究竟应该是怎样调用的顺序才合理?我在处理时发现在处理他们之间关系的时候不是很清楚,和以前使用的struts中的Connection不太一样。

2、我想用Factory方法来定义一个方法,来返回SessionFactory。但是否应该直接返回Session呢?而且还有一个问题,在这个方法中应该如何来处理异常?我的经验不足,请赐教。
代码:
public static net.sf.hibernate.SessionFactory getFactory() {
      try {
if (hasFactory) {
    return MySessionFactory.sessionFactory;
}
                else {
     sessionFactory = new Configuration().configure   ().buildSessionFactory();
hasFactory = true;
return sessionFactory;
}
      } catch (HibernateException ex) {
System.out.println(ex.getMessage());
return null;
}

3、怎样关闭session?我要是在action中执行关闭是否会影响其它程序?我如果用Factory方法该怎样处理?我希望SessionFactory 只生成一次,
毕竟要读取xml文件,但session可以从Factory方法中取,用完之后可以关闭。
   发表时间:2003-10-22  
1、不要在action里面写业务逻辑,当然更加不要写数据持久层的代码,这一点在你学习struts的时候应该被多次强调过的。

2、我前面好像贴过一个singleton实现的例子。返回SessionFactory还是返回Session都可以。

3、用完就关闭。
0 请登录后投票
   发表时间:2003-10-23  
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能。


Robbin的个性化签名为什么变了?我还是喜欢以前的签名。对Robbin的忠告:不要怕被打击,因为被打击久了抗打击能力就特别强,习惯了就好了。
我以前认识的一个人,因为脸长得特别长,别人给他起了一个外号叫大驴。
一开始他还生气,但时间久了就不生气了,打电话得时候就自称为大驴。
0 请登录后投票
   发表时间:2003-10-23  
有点问题不明白,请教一下:
1、不要在action里面写业务逻辑,当然更加不要写数据持久层的代码,这一点在你学习struts的时候应该被多次强调过的。
---------------------------
当然,我把业务逻辑都封装到辅助实现类中的方法中去了,数据持久层的代码也封装到辅助实现类中的方法中去了,而且封装性很好,但在action中也要调用这些方法呀?如果不在action里面实现业务逻辑,我应该在什么地方实现呢?我原来一直是这么用的,用action来完成业务逻辑,然后跳转到指定页面。

2、市面上没有关于hibernate的书籍,我看的是hibernate给的例子和hibernate的文档,但都写的是在Servlet中的使用,和struts中的不太一样。例如:
(1) 一开始,用initHibernate()来实现sessionFactory,这个我明白了。
(2)它在实现每一个逻辑时都用的是以下步骤:
              beginTransaction();
              selectAllCats(out);//或者其它的业务逻辑
              endTransaction(false);


               beginTransaction()中的功能是:

               session = sessionFactory.openSession();
               transaction = session.beginTransaction();

               endTransaction()中的功能是:
              
              if (commit) {
                       transaction.commit();
             } else {
                      transaction.rollback();
             }
             session.close();

现在的问题是,如果我把业务逻辑都用辅助类来实现, 在action中来实现这些功能,我就必须把session作为一个参数传递给方法。session我可以在一开是来取得,但辅助类中的transaction 我怎么处理?如果在辅助类中的方法中我每次都重新得到一个 session,然后进行transaction ,用完后关闭,那么在一个action中我可能调用多个方法,那岂不是要多次重新生成session,效率也太低了把?我现在使用的java.sql.Connection在每个 action中只生成一个,由多个方法共同使用,action结束后再关闭。我认为这样效率才高。

3、实际上问题的关键就是session、transaction的使用范围,我究竟可以实现多大程度的封装,使业务逻辑清晰。

4、不要嫌我麻烦!不准鄙视!
0 请登录后投票
   发表时间:2003-10-23  
1、

SessionFactory sf = ...;
Session s = ...;
Transaction tx = ...;
...
tx.commit();;
s.close();;


2、如果我出版了一本Hibernate的书,你有兴趣购买吗?

引用
那么在一个action中我可能调用多个方法,那岂不是要多次重新生成session,效率也太低了把


效率不会很低,又或者你采用ThreadLocal模式,前面有蛮多ThreadLocal模式的讨论,搜索一下。

3、其实还是和2一个问题,如何有效管理Transaction和Session,在你的应用当中,如果为了追求效率高一些,那么采用ThreadLocal模式。

4、我换签名是因为感觉老的签名太招摇了,引起了很多人不满。
0 请登录后投票
   发表时间:2003-10-23  
你是我的偶像,如果你要出书,我肯定会购买!!!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics