Hibernate+Spring MVC を使用してアプリケーションを開発しています。ログイン ページでは、単純にユーザー テーブルにクエリを実行し、ユーザーが有効かどうかを検証します。Spring と Hibernate の構成を使用すると、スムーズに動作します。しかし、問題は一度、セッションファクトリを作成し、次に検証しようとするときです。ユーザーの詳細は取得しません。コードは正常に実行されており、エラーもスローされていません。二次キャッシュもオフにしようとしましたが、問題はまだ存在します。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@//localhost:1521/XE"></property>
<property name="username" value="testdata"></property>
<property name="password" value="testdata"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="packagesToScan" value="org.test.model"></property>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
</props>
</property>
</bean>
package org.test.dao.impl;
import javax.transaction.Transaction;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.test.dao.DaoMethods;
import org.test.model.Sla_Users;
@Repository
public class DaoMethodsImpl implements DaoMethods{
@Autowired
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public int getUsersCount() {
System.out.println("INSIDE REPO->GETUSERSCOUNT"+getSessionFactory());
String sql = "select count(*) from Sla_Users";
Query query = getSessionFactory().openSession().createQuery(sql);
return ((Long) query.uniqueResult()).intValue();
}
@Override
public Sla_Users getUser(String username) {
System.out.println("INSIDE REPO->GETUSERPASSWORD"+getSessionFactory());
Session validateSession = this.getSessionFactory().openSession();
System.out.println(validateSession);
Sla_Users user = null;
try
{
user= (Sla_Users) validateSession.get(Sla_Users.class, username);
}
catch(Exception ex)
{
System.out.println("exception fetching user at login: "+ex);
}
finally
{
validateSession.close();
this.getSessionFactory().close();
System.out.println(validateSession+":"+getSessionFactory());
}
//Sla_Users user = (Sla_Users)this.getSessionFactory().openSession().get(Sla_Users.class, username);
return user;
}
}
それは私が使用したxmlです。アプリケーションで取得したすべての値に対して発生しているため、休止状態の基本的な部分が欠落していることはわかっています。セッションファクトリが初めて作成されたときは、毎回計画どおりに進みますが、次回データベースにクエリを実行すると...ブーム....バランスが崩れます。最も悲しいことは、例外さえ取得しないことです。コードは実行を停止します (db からの応答を待ちます)。
みんな助けて。