0

こんにちは、Hibernate を初めて使用します。

Hibernate Tools を使用してデータベース アクセス モジュールを生成しました。ジェネレーターは、DAOS および Hibernate Bean のコードを生成します。

このモジュールを単純な Java アプリケーションでテストするとすべて正常に動作しますが、Spring Web アプリケーションでテストすると非常に奇妙なエラーが発生します。私のモジュールは独立した jar であるため、単純な Java アプリケーションまたは Web アプリケーションで実行される状況に関係なく、データベースにアクセスする必要があります。私のWebアプリケーションのコードは次のとおりです。

  @Controller
  @RequestMapping("/")
  public class Controller implements ApplicationContextAware
  {


   private ApplicationContext applicationContext;


   @RequestMapping(value = "/purchased/songs", method = RequestMethod.GET)
   public String home(Model model)
   {   

     SessionManager.startOperation();

     ChargeTryDAOBase ctdb=new ChargeTryDAOBase();

     List <ChargeTry> data=ctdb.findByRemoteId("dsfsdfsdf8");


     SessionManager.endOperation();

     model.addAttribute("result", "data" );

     return "home";
   }



   @Override
   public void setApplicationContext(ApplicationContext arg0) throws BeansException
   {
     this.applicationContext = arg0;
   }

}

このコードを Tomcat で実行すると、次のエラーが発生します。

 org.springframework.web.util.NestedServletException: Handler processing
 nested exception is java.lang.NoSuchMethodError: 
 org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/Session;

    .....         

 java.lang.NoSuchMethodError:
 org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/Session;

Hibernate の依存関係を変更すると、次のエラーが発生します。

 java.lang.IllegalStateException: Could not locate SessionFactory in JNDI

上記のコードを単純な Java アプリケーションでテストすると、すべて正常に動作します。

これは春の休止状態の構成の問題ですか?

ご協力ありがとうございました。

4

2 に答える 2

0

助けてくれてありがとう、ついに私はすべて働いた。私はあなたのリンクをたどり、少しグーグルで検索しました。問題は、hibernate.cfg.xml ファイルで datasource パラメーターを有効にしなかったことです。C3P0 jdbc 接続プロバイダーも構成しました。

私の最終的な hibernate.cfg.xml ファイルは次のとおりです。

  <hibernate-configuration>
    <session-factory>
      <property name="hibernate.bytecode.use_reflection_optimizer">true</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
       <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
       <property name="current_session_context_class">thread</property>
       <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
       <property name="hibernate.connection.username">userdb</property>
       <property name="hibernate.connection.password">12345</property>
       <property name="hibernate.connection.datasource">java:comp/env/jdbc/mydb</property>
       <property name="hibernate.format_sql">true</property>
       <property name="hibernate.use_sql_comments">true</property>


       <property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>
       <property name="hibernate.c3p0.min_size">2</property>
       <property name="hibernate.c3p0.numHelperThreads">4</property>
       <property name="hibernate.c3p0.max_size">10</property>
       <property name="hibernate.c3p0.timeout">300</property>
       <property name="hibernate.c3p0.max_statements">100</property>
       <property name="hibernate.c3p0.idle_test_period">1800</property>
       <property name="hibernate.c3p0.acquire_increment">2</property>
    <hibernate-configuration>
    <session-factory>

私の web.xml に、次の行を追加しました。

<resource-ref>
    <description>This is a MySQL database connection</description>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
 </resource-ref>    

Spring コンテキスト ファイルに、次の行を追加しました。

    <beans:bean id="dataSource"    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <beans:property name="url" value="jdbc:mysql://localhost:3306/mydb"/> 
      <beans:property name="username" value="userdb"/>
      <beans:property name="password" value="12345"/> 
    </beans:bean>  

    <beans:bean id="sessionFactory"  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <beans:property name="dataSource" ref="dataSource" />
      <beans:property name="configLocation">
         <beans:value>classpath:hibernate.cfg.xml</beans:value>
      </beans:property>
    </beans:bean>

奇妙なことに、デフォルトの Hibernate 接続プロバイダーでは、上記のソリューションは機能しませんでしたが、C3P0 を構成するとすべて機能し始めました。

ご協力ありがとうございました。

于 2013-03-25T07:50:21.617 に答える
0

勉強してください

1: http://www.javatpoint.com/hibernate-and-spring-integration

2 http://viralpatel.net/blogs/spring3-mvc-hibernate-maven-tutorial-eclipse-example/

Spring MVC と Hibernate Integration の洞察を得る。

Hibernate 構成ファイルを操作できます-ここにリンクがあります-

春と hibernate.cfg.xml

ただし、アプリケーションは Spring マネージド コンテナー内にあるため、コードベースとパフォーマンスのメンテナンスと管理を改善するために、applicationcontext.xml を使用することを強くお勧めします。

于 2013-03-15T10:22:21.683 に答える