【问题标题】:Mixed properties setting in Hibernate 3.xHibernate 3.x 中的混合属性设置
【发布时间】:2014-08-20 11:58:44
【问题描述】:

我想使用 xml 文件以编程方式设置 Hibernate 属性中的几个

到目前为止,我已经完成了以下代码,但没有奏效。

MyHibernateUtil.java(这个类是用来创建Hibernate Session Factory):

          private static org.hibernate.SessionFactory sessionFactory;
          private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
          private static String configFile = CONFIG_FILE_LOCATION;
                    static {
    try {
        
        Properties prop = new Properties();
        prop.setProperty("hibernate.connection.username", userId);
        prop.setProperty("hibernate.connection.password", passCode);
        prop.setProperty("hibernate.connection.url", URL);
                  prop.setProperty("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver");
        prop.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle9Dialect");
        
        annotationConfiguration.configure(configFile).setProperties(prop);;
        sessionFactory = annotationConfiguration.buildSessionFactory();
      
    } catch (Exception e) {
        System.err.println("%%%% Error Creating SessionFactory %%%%");
        e.printStackTrace();
    }
}

     public static org.hibernate.SessionFactory getSessionFactory() 
     //This method will return SessionFactory object
    {
    return sessionFactory;
}

在我的hibernate.cfg.xml 中,我一直在关注

hibernte.cfg.xml:

   <session-factory>
<property name="dialect">
    org.hibernate.dialect.Oracle9Dialect
</property>
<property name="connection.driver_class">
    oracle.jdbc.driver.OracleDriver
</property>
<property name="hibernate.current_session_context_class">thread</property>
  <property name="show_sql">true</property>

<mapping class="Class1" />
<mapping class="Class2" />
<mapping class="Class3" />

   </session-factory>

我用运行正常的控制台应用程序尝试了此代码,但是当我尝试在我的 Web 应用程序中使用此代码时,我遇到了一些错误,因为我理解 Web 应用程序无法创建我的 HibernateUtil.java 的对象。

所以我创建了一个Listener 类,在该类中我尝试创建SessionFactory 对象,然后幸运的是我得到了SessionFactory 对象

但我的问题是

当我尝试使用 URL 访问我的 Web 应用程序时,出现以下异常

 14:52:04,734  WARN UserSuppliedConnectionProvider:46 - No connection properties specified - the user must supply JDBC connections
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
    Error! Please, check your JDBC/JDNI Configurations and Database Server avaliability. 
   Could not open or put a Hibernate Session in ValueStack: Hibernate Dialect must be explicitly set
    org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:80)
at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:62)
at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:460)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:155)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
at  org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at com.googlecode.s2hibernate.struts2.plugin.util.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:99)
at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.getHibernateSessionFromFactory(SessionTransactionInjectorInterceptor.java:289)
at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.intercept(SessionTransactionInjectorInterceptor.java:125)
   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
   at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
  at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544)
  at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at   org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

以下是我的 Web 应用程序功能:

  • Struts 2.3.x
  • HIbernate 3.1.x

编辑:

Same Problem Solution not found

我也有同款但是找不到

下面的类

   ServiceRegistryBuilder
   ServiceRegistrry 

 Are these classes are from Hibernate or we need to add any third party lib.

【问题讨论】:

    标签: java xml hibernate struts2


    【解决方案1】:

    您应该在构建会话工厂时指定hibernare.cfg.xml 的位置。

    /**
     * Location of hibernate.cfg.xml file.
     * Location should be on the classpath as Hibernate uses
     * #resourceAsStream style lookup for its configuration file.
     * The default classpath location of the hibernate config file is
     * in the default package. Use #setConfigFile() to update
     * the location of the configuration file for the current session.
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    
    
    annotationConfiguration.configure(CONFIG_FILE_LOCATION).setProperties(prop);
    

    【讨论】:

    • 我指定了文件路径。因为调用列表器类时我可以在控制台中看到所有映射类都已记录。
    • 你说我想以编程方式设置休眠属性...
    • 是的,其中一些像程序中的用户名和密码,其余的是 xml 文件,这可能吗?混合属性设置.. ?
    • 可能是我想念的地方。我已经按照你的建议做了。我的意思是这条线annotationConfiguration.configure(CONFIG_FILE_LOCATION).setProperties(prop); 在我打电话给annotationConfiguration.buildSessionFactory(); 这条线之前。
    • 我没有在您的代码中看到您提供了配置文件,您的配置文件包含构建会话工厂所需的配置设置。
    猜你喜欢
    • 2010-09-09
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多