关于spring和hibernate的session问题!
MH2o 2008-11-11 10:04:55 问题是这样的,我使用spring和hibernate做了个简单的小例子。一开始我使用的是spring的HibernateDaoSupport,基于这个超类。使用HQL去查询都没有什么问题。后来我想直接使用sql语句去进行查询,于是使用了下面的语句:getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery("select * from table where place = '" + place + "'").addEntity("aa", object.class).list();
但是这样直接调用会报一个错误:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 查询了之前的帖子,说是没有配置事务。
后来我改用直接使用基于HibernateTemplate进行回调的方式进行查询:
return (List)template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException{
return session.createSQLQuery("select * from table where place = '" + p + "'").addEntity("aa", Object.class).list();
}
});
这样就没有任何问题,这个session是如何进行管理的呢?
我的配置文件大体如下:
<bean id="myDataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/mydata">
</property>
<!-- jdbc:mysql://localhost:3306/testDemo -->
<property name="username" value="mydata"></property>
<property name="password" value="mydata"></property>
</bean>
<bean id = "hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<constructor-arg ref="mySessionFactory"></constructor-arg>
</bean>
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"></property>
<property name="mappingResources">
<list>
<value>modelwork/EchoMessage.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
</value>
</property>
</bean>
<bean id="tableDAO" class="modelwork.TableDAO">
<property name="sessionFactory">
<ref bean="mySessionFactory" />
</property>
<property name="template">
<ref bean="hibernateTemplate"/>
</property>
</bean>