2012-04-17 8 views
6

プロパティファイルからSpringに値を渡す際に次のエラーが発生するので、直接入力する必要はありませんhibernate.cfg.xmlより良い(そして正しい)アプローチがありますか?私は、無効なパスワードを入力するとそれが失敗するため、プロパティファイルが参照されていることがわかります。私はどんな助けにも感謝しています。jdbc.propertiesをSpring/Hibernateに渡すにはどうしたらいいですか?

WARNING: No connection properties specified - the user must supply JDBC connections 
Exception in thread "main" org.hibernate.HibernateException: Hibernate Dialect must be explicitly set 
    at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57) 
    at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39) 
    at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:426) 

これはapplicationContext.xmlを次のとおりです。

<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <mapping resource="cmsutil.entity/contentcomponent.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

パーラメシュの要求 - web.xmlの

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>redirect.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

<context:component-scan base-package="cmsutil"/> 
    <context:property-placeholder location="jdbc.properties"/> 

    <bean id="dataSource" 
      class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
      p:driverClassName="${jdbc.driverClassName}" 
      p:url="${jdbc.url}" 
      p:username="${jdbc.username}" 
      p:password="${jdbc.password}"/> 

    <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
      p:dataSource-ref="dataSource" 
      p:configurationClass="org.hibernate.cfg.AnnotationConfiguration" 
      p:packagesToScan="cmsutil.*"> 

     <property name="exposeTransactionAwareSessionFactory" value="false" /> 

     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
       <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 
       <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop> 
      </props> 
     </property> 

    </bean> 

    <bean id="txnManager" 
      class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
      p:sessionFactory-ref="sessionFactory"/> 

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>   

これは私のhibernate.cfg.xmlファイルであります

Rameshの場合、これは私のjdbc.propertieです。ルートディレクトリにあるS、(/src/java/jdbc.properties)

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://xx:3306/x 
jdbc.username=y 
jdbc.password=z 


hibernate.dialect=org.hibernate.dialect.MySQLDialect 
hibernate.show_sql=true 
hibernate.format_sql=false 
hibernate.generate_statistics=false 

答えて

8

は、web.xmlの代わりに、リスナー

<servlet> 
    <servlet-name>context</servlet-name> 
    <servlet-class> 
     org.springframework.web.context.ContextLoaderServlet 
     </servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
にこれはあなたの applicationContext.xml

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"><value>classpath:jdbc.properties</value></property> 
    </bean> 

アップデートでこのBeanを追加します

+0

提案していただきありがとうございます。それを試しましたが、同じエラーが発生しました。非常にイライラ。これは私が作っているよりも単純でなければなりません。 – EdgeCase

+0

ここでweb.xmlを更新できます –

+0

リクエストごとにweb.xmlが追加されました。ありがとう。 – EdgeCase

0

私は同じ問題がありましたが、それは私のJavaコードのエラーの結果でした。 buildSessionFactory()を呼び出す前に、Configurationconfigure()を呼び出す必要がありました。

configure()メソッドのjavadoc:

はhibernate.cfg.xmlという名前のアプリケーション・リソース で指定されたマッピングおよびプロパティを使用してください。

ブロークン・コード:

public static void main(String[] args) { 
     Configuration cfg = new Configuration(); 

     factory = cfg.buildSessionFactory(); // missing the configure() call 

     Session s = factory.openSession(); 
     Transaction tx = null; 
     try { 
      tx = s.beginTransaction(); 

ソリューション:

public static void main(String[] args) { 
     Configuration cfg = new Configuration(); 

     factory = cfg.configure().buildSessionFactory(); 

     Session s = factory.openSession(); 
     Transaction tx = null; 
     try { 
      tx = s.beginTransaction(); 

注:私は春の設定を使用していませんでした。

関連する問題