Я вызываю нижеприведенную функцию с тем же batchNumber , и она работает без проблем 15 раз и без проблем получает записи из базы данных, но в 16. время приложение останавливается, когда query.list () строка называется. и не пишет " после запроса " (см. строку System.out). Он просто теряет фокус отладки и не дает никаких исключений. Эта проблема, вероятно, не о hql, потому что я видел эту проблему раньше, чем hql, и я использовал критерии вместо hql, и я получил эту проблему. Но для этого, когда я использовал « group by » в критериях (setProjection ....), он не возвращает результат, поскольку hibernate model (object) просто возвращает список. Но мне нужны результаты в качестве модели.
Примечание: примерно в 15 раз это только для теста. Это веб-приложение, и пользователь может многократно нажимать кнопку, которая вызывает эту функцию, чтобы просмотреть извлеченные записи из базы данных.
SiteAddressDaoImpl
public class SiteAddressDaoImpl<T, Id extends Serializable> extends
GenericDaoHibernateImpl implements SiteAddressDao {
public List<SiteAddressModel> getSitesByBatch(String batchNumber) {
try {
List<SiteAddressModel> siteList;
MigrationPlanDao migrationPlanDao = ServiceFactory
.getO2SiteService().getMigrationPlanDao();
Query query = this.getSession().createQuery(
"from " + persistentClass.getName() + " where "
+ "siteType =:" + "type and siteName in "
+ "(select distinct exchange from "
+ migrationPlanDao.getPersistentClass().getName()
+ " where migrationBatchNumber =:" + "batchNumber"
+ ")");
query.setString("batchNumber", batchNumber);
query.setString("type", "LLU/ASN");
System.out.println("before query");
siteList = query.list();
System.out.println("after query");
return siteList;
} catch (Exception e) {
e.printStackTrace();
}
}
...
}
GenericDaoHibernateImpl
public class GenericDaoHibernateImpl<T, Id extends Serializable> extends HibernateDaoSupport implements GenericDao<T, Id> {..........}
Свойства Hibernate
<!-- Hibernate SessionFactory Definition -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
depends-on="annotatedClassRegistrar">
<property name="dataSource" ref="dataSource"/>
<property name="annotatedClasses" ref="annotatedClassList"/>
<property name="hibernateProperties">
<props>
<prop key="c3p0.acquire_increment">1</prop>
<prop key="c3p0.idle_test_period">120</prop>
<prop key="c3p0.max_size">50</prop>
<prop key="c3p0.max_statements">0</prop>
<prop key="c3p0.min_size">20</prop>
<prop key="c3p0.timeout">0</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
</props>
</property>
</bean>
<!-- Spring Data Access Exception Translator Defintion -->
<bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="exceptionTranslator" ref="jdbcExceptionTranslator"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Hibernate Template Defintion -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="jdbcExceptionTranslator" ref="jdbcExceptionTranslator"/>
</bean>
бобов для даос
<bean name="migrationPlanDao"
class="com.alcatel.lucent.tr.o2ccm.middleware.dao.impl.MigrationPlanDaoImpl">
<constructor-arg value="com.alcatel.lucent.tr.o2ccm.middleware.model.hibernate.MigrationPlanModel"/>
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
<bean name="siteAddressDao" class="com.alcatel.lucent.tr.o2ccm.middleware.dao.impl.SiteAddressDaoImpl">
<constructor-arg value="com.alcatel.lucent.tr.o2ccm.middleware.model.hibernate.SiteAddressModel"/>
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
я просто сделал hql
Query query = this.getSession().createQuery("from " + persistentClass.getName() + " where " + "siteName='siteName'");
это не сработало при 16-м запросе.
Я использовал критерий экземпляр hql, который выполняет ту же работу, что и hql. Сработало какая разница ...
DetachedCriteria criteria = DetachedCriteria.forClass(persistentClass);
criteria.add(Property.forName("siteName").eq("siteName"));
siteList = getHibernateTemplate().findByCriteria(criteria);
Hibernate версия 3.2.0.ga
Обновлено : я добавил некоторые детали.