2017-10-06 9 views
0

私は一連のチュートリアルアプリを使って、さまざまなJava EE技術を扱っています。私は様々なチュートリアルに従っていますし、多かれ少なかれそれらに固執しています。最近私は、従業員DBテーブルの従業員を保存、検索、変更、削除するための簡単なSpring CRUD Webアプリケーションを作成し始めました。私は以前に、JavaとHibernateだけを使用し、まったく同じ機能を達成することを目指した非常に似た別のアプリケーションを完成させました。そのアプリケーションはうまくいきました。そこで、この古いアプリから新しいバネ1にデータベース接続設定をコピーすることにしました。SpringのDriverManagerDataSourceの特定のプロパティを設定するには?

問題点は、SpringのDriverManagerDataSource Beanは、元のHibernate構成と同じプロパティの設定を受け付けていないように見えます。例えば、起動時にDBを簡単に消去するための "hibernate.hbm2ddl.auto"または "defaultSchema"、何らかの理由でPostgresが必要とするので、私はDB接続の設定に苦しんでいます。

Springが古いアプリケーションのHibernateと同じプロパティを受け入れ、同じ動作をするようにするにはどうすればよいですか? Beanが "url"や "password"のような他のプロパティのように、これらの特定のプロパティを予測可能で賢明な方法で受け入れないのはなぜですか?私はそれらを設定しようとしているのでしょうか?プロパティから欲しい機能を処理する、Springの他のメカニズムはありませんか?

旧アプリの設定:

hibernate.cfg.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
     <property name="connection.driver_class">org.postgresql.Driver</property> 
     <property name="connection.url">jdbc:postgresql://localhost:5432/test2</property> 
     <property name="connection.username">postgres</property> 
     <property name="connection.password">postgres</property> 

     <property name="hibernate.default_schema">public</property> 
     <property name="show_sql">true</property> 
     <property name="use_sql_comments">true</property> 
     <property name="hibernate.hbm2ddl.auto">create</property> 

     <mapping class="cz.bsc.hibernatetest.hibernatetutorial.domain.Book" /> 
     <mapping class="cz.bsc.hibernatetest.hibernatetutorial.domain.Author" /> 

    </session-factory> 
</hibernate-configuration> 

私は上記のように変更しようとチュートリアルから取られた春の設定の一部:

春-servlet.xml

<beans...> 
    <bean id="ds" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver"></property> 
     <property name="url" value="jdbc:postgresql://localhost:5432/test2"></property> 
     <property name="username" value="postgres"></property> 
     <property name="password" value="postgres"></property> 

     <property name="spring.jpa.hibernate.defaultSchema" value="public"></property> 
     <property name="spring.jpa.hibernate.show_sql" value="true"></property> 
     <property name="spring.jpa.hibernate.use_sql_comments" value="true"></property> 
     <property name="spring.jpa.hibernate.hbm2ddl.auto" value="create"></property> 
    </bean> 
</beans> 

現在の形状のアプリケーションがスローするという完全なエラーメッセージ。私は意図していない方法でプロパティを設定しようとしていることを示していると推測しているので、構文エラーです。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empController': Unsatisfied dependency expressed through field 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dao' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Cannot resolve reference to bean 'jt' while setting bean property 'template'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jt' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Cannot resolve reference to bean 'ds' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ds' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'spring.jpa.hibernate.defaultSchema' of bean class [org.springframework.jdbc.datasource.DriverManagerDataSource]: Nested property in path 'spring.jpa.hibernate.defaultSchema' does not exist; nested exception is org.springframework.beans.NotReadablePropertyException: Invalid property 'spring' of bean class [org.springframework.jdbc.datasource.DriverManagerDataSource]: Bean property 'spring' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 
+0

春はJPAをサポートしてきましたし、最初から休止状態。あなたはもう少し研究をすべきです。あなたが最新のものにしたいのであれば、Spring BootとSpringのデータを見てください。 – duffymo

+0

ありがとう、私はそれらを見て、私が望む機能を得る方法を私に指摘する何かを見つけることができるかどうかを確認します。 – Sargon1

+0

https://spring.io/guides/gs/accessing-data-jpa/ – duffymo

答えて

1

Hibernatesプロパティはデータソース定義の一部ではありません。 セッションファクトリBeanの下で定義する必要があります。

例えば:

<beans> 
    <bean id="ds" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver"></property> 
     <property name="url" value="jdbc:postgresql://localhost:5432/test2"></property> 
     <property name="username" value="postgres"></property> 
     <property name="password" value="postgres"></property> 
    </bean> 


    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

     <property name="dataSource" ref bean="ds" /> 
       <property name="packagesToScan" value="db entities package name" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.defaultSchema">public</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.use_sql_comments">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
</beans> 
関連する問題