如题,服务器是tomcat5.5,项目是hibernate+struts1.
tomcat启动后,第一次运行该项目时,控制台会显示加载hibernate里映射文件(就是table.hbm.xml)可是如果在tomcat没有加载完映射文件的同时另一个人也运行这个项目的时候就会报加载映射文件错误,类似哪个文件被重复加载的错误。。不知道怎么配置就能做到tomcat启动后,也把映射文件也加载完毕了,这样就可以避免同时运行,重复加载了。

解决方案 »

  1.   

    org.hibernate.MappingException: duplicate import: com.y.hibernate.Biglawdiscrecord
    at org.hibernate.cfg.Mappings.addImport(Mappings.java:105)
    at org.hibernate.cfg.HbmBinder.bindPersistentClassCommonValues(HbmBinder.java:541)
    at org.hibernate.cfg.HbmBinder.bindClass(HbmBinder.java:488)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:234)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:152)
    at org.hibernate.cfg.Configuration.add(Configuration.java:362)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:400)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:449)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1263)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1235)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1217)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1184)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
    at com.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:63)
    at com.HibernateSessionFactory.getCurrentSession(HibernateSessionFactory.java:47)
      

  2.   

    我说的这个错误也只有在第一次运行项目的时候会出现,一旦项目的hibernate的configuration把hibernate.cfg.xml加载完了,就不会出现我说的那个错误了可是一旦加载hibernate.cfg.xml的同时,另一个人启动项目,就也会导致configuration把hibernate.cfg.xml再次加载。就会出现重复导入文件的错误了。
      

  3.   

    嗯,对啊,不过我有时会看到别人的项目在tomcat启动后运行项目时控制台没有加载hibernate.cfg.xml的信息,好像是在tomcat启动的时候就已经把hibernate.cfg.xml预加载完 ,也就不会出现我说的问题了。所以我就想问怎么配置就能让tomcat启动时把hibernate.cfg.xml也加载上。
      

  4.   

    什么对呀??
    你和你的同事用的是一个tomcat还是两个tomcat??
    你们启动的是一个应用还是两个应用??
    如果是每个人在各自的tomcat上启动各自的应用,那么怎么可能会相互影响??
    如果是两个人启动同一个tomcat,那能启动起来吗????
      

  5.   

    一个tomcat,同一个项目。难道没人遇到跟我一样的问题吗,第一次运行hibernate项目的时候不会触发这句吗configuration.configure(configFile);在这句还没执行完的时候这个项目又被运行,因为configuration.configure(configFile)还没执行完毕,所以它也会触发configuration.configure(configFile);,
    就导致了被重复加载。
      

  6.   

    我想不通在什么情况下,会出现“在这句还没执行完的时候这个项目又被运行”
    我对你所谓“启动项目”的说法一直没搞懂。
    你的意思是,你把项目部署到tomcat后,通过tomcat的那个批处理文件,启动tomcat的同时,另一个人又点了一次启动?
      

  7.   

    看不明白,推荐条路:配到spring里去
      

  8.   

    呵呵,不是,可能我说不还不够清楚不是tomcat被启动两次。1.tomcat启动
    2.打开浏览器,地址栏里输入:http://localhost:8080/oa/login.jsp
    3.在打开的登陆页里敲入username/password点击登陆按纽,登陆。4。这时我又打开一个浏览器,重复2和3的操作。第三步会请求action,action里用了DAO,DAO文件里用了hibernate的sessin工厂,所以就会使configuration加载xml配置文件。可是表多的话会加载个几秒到十几秒。这十几秒的时间里我做了4的操作。因为第三步还没加载完,在第4步里就会又加载一遍,
    就导致出错。。这样应该够清楚了。