Code Bye

hibernate Spring 配置文件整合 如何获取sessionfactory

如果hibernate配置文件还在的话就是Configuration.configure().buildSessionFactory()加载文件中的配置(数据源等),
当该配置整合进applicationContext.xml后该怎么获取,不使用getHibernateTemplate的情况下,求教各位前辈!

 
你整合spring,你不需要写sessionfactory的吗
 
整合的话,你的sessionfactory至少要注入到某些类下吧?在对应的那个类下get就是了。

10分

你也可以写一个类继承ApplicationContextAware

public class SpringContextUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext _applicationContext) throws BeansException {
        applicationContext = _applicationContext;
    }

    /**
     *  可以得到spring管理的bean
     */
    public static Object getBean(String beanName) {
        return applicationContext.getBean(beanName);
    }

通过这个类就可以得到spirng管理的所有bean了

 
这是我的sessionfactory
<bean id=”sessionFactory”
class=”org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean”>
<property name=”dataSource”>
<ref bean=”dataSource” />
</property>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>
org.hibernate.dialect.MySQLDialect
</prop>
<prop key=”hibernate.Show_sql”>
true
</prop>
<prop key=”hibernate.hbm2ddl.auto”>create</prop>
</props>
</property>
<property name=”mappingResources”>
<list>
<value>test/vo/CwManager.hbm.xml</value></list>
</property>
<property name=”annotatedClasses”>
<list>
<value>test.vo.user</value></list>
</property></bean>
 
怎么get求指教··
<bean id=”sessionFactory”
class=”org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean”>
<property name=”dataSource”>
<ref bean=”dataSource” />
</property>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>
org.hibernate.dialect.MySQLDialect
</prop>
<prop key=”hibernate.Show_sql”>
true
</prop>
<prop key=”hibernate.hbm2ddl.auto”>create</prop>
</props>
</property>
<property name=”mappingResources”>
<list>
<value>test/vo/CwManager.hbm.xml</value></list>
</property>
<property name=”annotatedClasses”>
<list>
<value>test.vo.user</value></list>
</property></bean>

10分


//  TestManager get set sessionFactory ,
 <bean id=“testManager” class=""x.x.x.TestManager"" >
 <property name="sessionFactory" ref="sessionFactory"/>
<bean/>
 
原来是指这个,这个配置一早就有了,现在的问题是No setter found for property “”sessionFactory”” in class…,实际是写了set方法的,用继承HibernateDaoSupport的方法没问题,就是想用知道用sessionFactory不行的原因在哪
 

你的类怎么写的,贴出来

 

package test.dao;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import hubin.daointerface.IDoubiTest;
import hubin.vo.Doubi;

public class DoubiDao implements IDoubiTest {

private static SessionFactory sessionFactory;
//static {
//try{
//AnnotationConfiguration config = new AnnotationConfiguration();
// sessionFactory = config.buildSessionFactory();
// }catch(Exception e){
// e.printStackTrace();
// }
// }
//
/**static {
try{
Resource resource=new ClassPathResource(“applicationContext.xml”);
BeanFactory factory=new XmlBeanFactory(resource);
sessionFactory = (SessionFactory)factory.getBean(“sessionFactory”);
}catch(Exception e){
e.printStackTrace();
}
}**/

/**
* 保存对象
* @throws Exception
*/
public void savedoubi(Doubi db){
Session session = sessionFactory.openSession();
Transaction tx = null;
try{
tx=session.beginTransaction();
session.save(db);
tx.commit();
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}
finally{
session.close();
}
}

/**
* 删除所有对象
*/
public void delalldoubi(){
Session session = sessionFactory.openSession();
Transaction tx=null;
try{
tx=session.beginTransaction();
session.delete(“from Doubi as d”);
tx.commit();
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}
finally{
session.close();
}
}

/**
* 查找所有对象
*/
public List findalldoubi(){
Session session =sessionFactory.openSession();
Transaction tx=null;
tx=session.beginTransaction();
try{
Query query=session.createQuery(“from Doubi as d”);
List doubilist=query.list();
if(doubilist!=null&&doubilist.size()>0){
Iterator it =doubilist.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
tx.commit();
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}
finally{
session.flush();
}
return null;
}

public static void setSessionFactory(SessionFactory sessionFactory) {
DoubiDao.sessionFactory = sessionFactory;
}

}

10分

public static void setSessionFactory(SessionFactory sessionFactory) {
DoubiDao.sessionFactory = sessionFactory;
}

这个不能是静态方法
private static SessionFactory sessionFactory;
而你这个真没必要搞成静态的,spring是通过调用对象的set方法注入的,
你这静态方法,怎么能行

 

我把这两个地方的静态去掉了,结果这里出现空指针异常了 Session session =sessionFactory.openSession();

 

那肯定是你初始化dao的方式错了,难道你是new dao
从spring容器中获取dao实例,应该没问题的

 

果然如此··多谢了 写测试类没注意··


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hibernate Spring 配置文件整合 如何获取sessionfactory