40分诚心求解:spring 注入sessionfactory 报nullpoint exception 错误!
简单的用户登录 ,输入用户名和密码 ,struts2的action 查找数据库,匹配则跳到成功页面,否则到登录页面.
spring用注解的方式.
下面是主要配置文件:
applicationContext.xml:
<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="org.postgresql.Driver"></property>
<property name="url" value="jdbc:postgresql://localhost/myssh"></property>
<property name="username" value="postgres"></property>
<property name="password" value="000000"></property>
</bean>
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref local="myDataSource" />
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect//数据库我用的是postgresql
</value>
</property>
</bean>
下面为测试代码:
@Resource(name="sessionfactory")
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void setSessionFactory(SessionFactory sessionFactory) {
testconfiguration.sessionFactory = sessionFactory;
}
@Test
public static void test() {
String hql="from oa_user";
Session session=sessionFactory.openSession();//这行报错!
List list=session.createQuery(hql).list();
User u=(User)list.get(0);
System.out.println(list);
session.close();
------解决方案--------------------初步怀疑是sessionFactory为NULL,好像没有用到getSessionFactory()~
你把报的错误贴出来看看
------解决方案--------------------楼上对了,这里提供一种修改方法在applicationContext.xml加入配置
<bean id="getsession" class="测试类路径" factory-method="getSession"></bean>
------解决方案--------------------
请lz注意以下两点:
1,当使用@Resource注解时请确保此测试类必须由spring管理,也就是说要将你所写的测试类也放到spring的容器中;
2,好像不能给静态属性或方法注入吧?虽然我没有测试过。请lz将
public static void setSessionFactory(SessionFactory sessionFactory)的中方法static去掉,并将@Resource放到此方法上。
------解决方案--------------------静态的和非静态的都可以注入,方法注入要在配置文件中明确给出,不给出是不会被加载的
------解决方案--------------------不好意思,看错问题了,5楼正解
------解决方案--------------------如果楼主单纯是为了hibernate而用spring的话,建议用struts2的hibernate plugin代替。