hibernate3和struts开发整合

hibernate3和struts的结合使用其实没有什么特别复杂的过程,只是在其中老是有莫名其妙的Exception。
  • hibernate的lib目录所有的jar要是都copy到project的WEB-INF/lib中肯定没什么问题,但是我就不是很喜欢这样做,因此总结jar作用如下:
  • *  dom4j(必需):Hibernate在解析XML配置和XML映射元文件時需要使用dom4j。
        * CGLIB(必需):Hibernate在運行時使用這個代碼生成庫強化類(與Java反射機制聯合使用)。
        * Commons Collections, Commons Logging(必需):Hibernat使用Apache Jakarta Commons項目提供的多個工具類庫。

        * ODMG4(必需):Hibernate提供了一個可選的ODMG兼容持久化管理界面。如果你需要映射集合,你就需要這個類庫,就算你不是為了使用ODMG API。

        * EHCache(必需):Hibernate可以使用不同的第二級Cache方案。如果沒有修改配置的話,EHCache提供默認的Cache。
    jta.jar(必需):若你在使用hibernate要到Transaction则要使用这个jar包,建议使用Transaction

  • struts怎么样通过hibernate链接数据库

               我使用的是插件的方式:在struts-config.xml文件中加入:
             <plug-in className="packagename.ConfigurableProjPlugin"/>
ConfigurableProjPlugin类的代码如下:
##################################
package name;

import javax.servlet.ServletException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import org.hibernate.Session;

/**
 * @author sermonizer
 *
 * To change the template for this generated type comment go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
public class ConfigurableProjPlugin implements PlugIn {
    private static Log logger = LogFactory.getLog(ConfigurableProjPlugin.class);
       
    public void destroy() {
        HibernateUtil.closeSession();   
        logger.info("db connection is destoryed !!!");
    }

    public void init(ActionServlet arg0, ModuleConfig arg1) throws ServletException {
        Session session = HibernateUtil.currentSession();
        logger.info("db connection is created successfull !!!");       
    }
   
}
##################################
其中涉及到HibernateUtil类,代码如下:
##################################
package name;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (HibernateException ex) {
            throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
        }
    }

    public static final ThreadLocal session = new ThreadLocal();

    public static Session currentSession() throws HibernateException {
        Session s = (Session) session.get();
        // Open a new Session, if this Thread has none yet
        if (s == null) {
            s = sessionFactory.openSession();
            session.set(s);
        }
        return s;
    }

    public static void closeSession() throws HibernateException {
        Session s = (Session) session.get();
        session.set(null);
        if (s != null)
            s.close();
    }
}

##################################

用hibernate tools生成xml文件的一些bug说明:


这样strut在loader的时候就会通过hibernate链接数据库了,当然hibernate-cfg.xml文件不能少的
这里值得注意的是:用hibernate tools生成的mapping文件很有问题,它会在
1.<class name="tableclass" table="tablename" catalog="×××">加上catalog内容,导致hibernate运行时按照一下顺序找table :dbname.×××.table。这样老是找不到导致Exception。

2.它不会在hbm.xml文件里的 <hibernate-mapping>中加入auto-import="true",从而导致HQL不能正常的使用。因为所有的SQL语句的From对象均是来自×××.hbm.xml的class name值。

3.对于我在数据库设计时就规定该field为auto_increment,但是用tool生成的描述文件就硬生生的写着<generator class="assigned" />,这样但是在save的时候老是要set这个field的值,因此应该改成<generator class="increment" />才能让数据库自动去产生这个field值

但是现在我仍旧没有找到什么好的方法,by the way,hibernate tool不能同步数据库表修改mapping文件,但是hibernate synchronizer工具又不能很好的支持hibernate3,唉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值