-
getHibernateTemplate()为NUll,困扰好几天了,网上也找了好些方法一直解决不掉15
小弟刚刚开始学SSH,是用的Struts2+Hibernate+Spring,运行的时候发现getHibernateTemplate()得到的模板类始终是nUll值,郁闷好几天了,一直在我网上试各种方法,迄今任为解决,恳请各位指教咯!
applicationContext.xml:(事务处理这儿没贴出来)<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <!-- 定义数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/jjufriend"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> <!-- 定义Hibernate的sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <!-- Hibernate 的sessionFactory的属性 --> <property name="hibernateProperties"> <props> <!-- 数据库方言 --> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <!-- 显示Hibernate持久化操作所生成的SQL语句 --> <prop key="hibernate.show_sql">true</prop> <!-- 将SQL脚本进行格式化后再输出 --> <prop key="hibernate.format_sql">true</prop> </props> </property> <!-- 列出全部的映射文件 --> <property name="mappingResources"> <list> <value>com/jjufriend/student/model/Student.hbm.xml</value></list> </property></bean> <!-- 配置dao组件 --> <bean id="studentDao" class="com.jjufriend.student.dao.impl.StudentDaoHibernate"> <!-- 依赖注入DAO组件所必需的SessionFactory引用 --> <property name="sessionFactory" ref="sessionFactory"> </property> </bean> <!-- 配置业务逻辑组件 --> <bean id="mgr" class="com.jjufriend.student.service.impl.StudentManagerImpl"> <property name="studentDao" ref="studentDao"></property> </bean>
studentDao.java:package com.jjufriend.student.dao; import java.util.List; import com.jjufriend.student.model.Student; public interface StudentDao { Student get(Integer id); Integer save(Student student); void update(Student student); void delete(Student student); void delete(Integer id); List<Student> findAll(); Student findStudentByNameAndPass(String username,String password); Student findByName(String username); }
StudentDaoHibernate.java:package com.jjufriend.student.dao.impl; import java.io.Serializable; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.jjufriend.student.dao.StudentDao; import com.jjufriend.student.model.Student; public class StudentDaoHibernate extends HibernateDaoSupport implements StudentDao,Serializable { private SessionFactory sessionFactory; HibernateTemplate ht = this.getHibernateTemplate() ; public void delete(Student student) { // TODO Auto-generated method stub getHibernateTemplate().delete(student); } public void delete(Integer id) { // TODO Auto-generated method stub getHibernateTemplate().delete(get(id)); } public List<Student> findAll() { // TODO Auto-generated method stub return (List<Student>)getHibernateTemplate().find("from Student"); } public Student findByName(String username) { List stu = getHibernateTemplate().find("from Student st where st.username = ?",username); if(stu != null && stu.size() >= 1){ return (Student)stu.get(0); } return null; } public Student findStudentByNameAndPass(String username, String password) { // TODO Auto-generated method stub List students = null; try{ // HibernateTemplate temple = this.getHibernateTemplate(); System.out.println("模板类是否为NULL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+ht); // 取出所有 students = temple.find("from student"); students = ht.find("from student st where st.username = " + username + " and st.password = " + password); }catch(Exception e){ System.out.println("查找过程中出现异常.............."); e.printStackTrace(); } if(students != null && students.size() >= 1){ return (Student)students.get(0); } return null; } public Student get(Integer id) { return (Student)getHibernateTemplate().get(Student.class, id); } public Integer save(Student student) { return (Integer)getHibernateTemplate().save(student); } public void update(Student student) { // TODO Auto-generated method stub getHibernateTemplate().update(student); } }
StudentManager.java:package com.jjufriend.student.service; import com.jjufriend.student.model.Student; public interface StudentManager { int addStudent(Student student) throws Exception; int loginValid(Student student) throws Exception; boolean validateName(String username) throws Exception; }
StudentManagerImpl.java:package com.jjufriend.student.service.impl; import com.jjufriend.student.dao.StudentDao; import com.jjufriend.student.dao.impl.StudentDaoHibernate; import com.jjufriend.student.model.Student; import com.jjufriend.student.service.StudentManager; public class StudentManagerImpl implements StudentManager { /*2009-11-12 22:44修改 出去new StudentDaoHibernate() */ private StudentDao studentDao = new StudentDaoHibernate() ; // private ApplicationContext cxt = // new FileSystemXmlApplicationContext("../webapps/JJUFriend/WEB-INF/applicationContext.xml"); // studentDao =(StudentDaoHibernate)cxt.getBean("studentDao"); public void setStudentDao(StudentDao studentDao){ this.studentDao = studentDao ; } public int addStudent(Student student) throws Exception { // TODO Auto-generated method stub try{ studentDao.save(student); return student.getId(); }catch(Exception e){ e.printStackTrace(); throw new Exception("新增用户时出现异常"); } } public int loginValid(Student student) throws Exception { try{ System.out.println(studentDao); System.out.println("是否取到页面提交的数据:Name="+student.getUsername()); Student stu = studentDao.findStudentByNameAndPass(student.getUsername(), student.getPassword()); if(stu != null ){ return stu.getId(); } }catch(Exception e){ System.out.println("验证用户登录时出现异常"); e.printStackTrace(); } // TODO Auto-generated method stub return -1; } public boolean validateName(String username) throws Exception { // TODO Auto-generated method stub try{ if (studentDao.findByName(username) != null){ return true ; } }catch(Exception e){ System.out.println("验证用户名是否用效时出错"); e.printStackTrace(); } return false ; } }
问题的关键是通过方法getHibernateTemplate()不能正确得到HibernateTemplate对象,始终的空值,网上有很多解决的办法,差不多我都试过了,
下面这种方法是说不能直接new StudentDao对象,用下面这种方法取得,可以启动服务器老是不停地跳动,一直不停,直到报错。// private ApplicationContext cxt = // new FileSystemXmlApplicationContext("../webapps/JJUFriend/WEB-INF/applicationContext.xml"); // private StudentDao studentDao =(StudentDaoHibernate)cxt.getBean("studentDao");
还有些方法是直接从applicationContext.xml中的bean取得HibernateTemplate对象,始终都搞不定,望大家指教了。
(顶格的System.out.println()语句均是测试用的语句)
问题补充:
谢谢大家的热心帮助!!
确实其中出了不少问题,主要是最近网上看到解决这个方法的帖子很多,尝试过很多方法,都有点儿改晕了。
一楼的方法我尝试了,还是不行,private ApplicationContext cxt = this.getApplicationContext(); private StudentDao studentDao = (StudentDaoHibernate)cxt.getBean("studentDao");
其中那个this.getApplicationContext(); 方法根本不存在啊,无法取得配置文件。
之前类似的方法我也用过就是用private ApplicationContext cxt = new FileSystemXmlApplicationContext("../webapps/JJUFriend/WEB-INF/applicationContext.xml"); private StudentDao studentDao =(StudentDaoHibernate)cxt.getBean("studentDao");
取得,但是当启动服务器后,后台一直跑个不停,仿佛是个死循环似的。浏览器中通过http://localhost:8080访问都无效!
StudentDaoHibernate.java中的private SessionFactory sessionFactory;已经去掉
数据库方言也该过来了
2009年11月13日 12:49
9个答案 按时间排序 按投票排序
-
采纳的答案
我大至看了一下,个人感觉有两点不对:
1、StudentManagerImpl.java中的
private StudentDao studentDao = new StudentDaoHibernate() ;
不应该new ,直接 = null 就可以。因为你已经使用了spring的注入。
2、StudentDaoHibernate.java中的
private SessionFactory sessionFactory;应该去掉。
HibernateTemplate ht = this.getHibernateTemplate() ;应该去掉。
这两个是父类的属性,不需要你重载,也不该重载。即使你非要重载,那你也应该写上setter吧,要不spring找不到setter不还是会注入到父类中去么,所以你总是获得null。
以上观点仅代表个人意见,如果说的不对,请批评和指正。2009年11月13日 13:45
-
public class StudentManagerImpl implements StudentManager { private StudentDao studentDao ; public static StudentManagerImpl smi; public StudentManagerImpl() { smi = this; System.out.println("我自动生成了"); } public void setStudentDao(StudentDao studentDao){ System.out.println("我自动调用了set方法"); this.studentDao = studentDao ; }
public class StudentDaoHibernate extends HibernateDaoSupport implements StudentDao,Serializable { private SessionFactory sessionFactory; public static HibernateTemplate ht ; public static StudentDaoHibernate sdh; public StudentDaoHibernate() { System.out.println("自动调用"); ht = this.getHibernateTemplate(); sdh = this; }
通过这两节代码你看看spring在地下偷偷干了啥
StudentManagerImpl.smi 你看看是不是你要的东西
不要直接new
2009年11月13日 17:33
-
public class StudentManagerImpl implements StudentManager { private StudentDao studentDao ; /** *这个方法是由 spring 自动调用的,只要定义了studentDao ,在类里放上 *getter/setter就不用管了 * <bean id="mgr" * class="com.jjufriend.student.service.impl.StudentManagerImpl"> * <property name="studentDao" ref="studentDao"></property> * </bean> * 这里的property -name -ref 会帮你做好 */ public void setStudentDao(StudentDao studentDao){ this.studentDao = studentDao ; }
2009年11月13日 17:24
-
楼主,两个建议:
1.仔细对照书籍,按照书上的例子做一遍。你的问题主要是SPRING相关的不熟悉,所以hibernate砍掉,直接spring加载普通的类。先把简单的配置成功,再把hibernate,struts加进来,一个一个来。
2.出现问题一定要看控制台的信息,错误在哪行,是什么错误。
从你上面的发言可以看出,有些基础的概念还没掌握比如
ApplicationContext是什么?
你可以通过new 指定xml文件地址,获得spring环境,也可以通过依赖注入,也可以使用getWebApplicationContext(),当然要使用这个需要继承Spring提供的ActionSupport。建议你找本专业点书籍看,SSH的东西,光在问答上还是说不清的。
建议找本实战的书,什么 “深入浅出spring" struts+spring+hibernate集成。
按照书上的例子走一遍。
依赖注入需要为bean的变量提供setter。OVER...2009年11月13日 16:53
-
用
org.hibernate.dialect.SQLServerDialect
看来也是可以的,整个运行都没问题,没出现楼主说的问题2009年11月13日 14:25
-
<property name="url" value="jdbc:mysql://localhost:3306/jjufriend">
为什么你数据库用的是MySQL,而sessionFactory里的方言设置是<prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop>
,用的是SQLServer的,这肯定不行吧?!2009年11月13日 14:04
-
private ApplicationContext cxt = this.getApplicationContext(); private StudentDao studentDao = (StudentDaoHibernate)cxt.getBean("studentDao");
studentDao 对象直接 new 的话里面是没有Hibernate上下文的。
只能取得在配置文件中自动生成的实例2009年11月13日 13:49
相关推荐
gethibernatetemplate的find方法,find(String queryString);find(String queryString , Object value);find(String queryString, Object[] values);findByExample(Object exampleEntity);findByExample(Object ...
下面将详细介绍`getHibernateTemplate()`中常用的几个方法及其应用场景。 ### 1. `find(String queryString)` 此方法用于执行HQL查询语句并返回结果列表。 **示例:** ```java List<User> users = this....
`getHibernateTemplate()`方法是Spring框架中用于整合Hibernate ORM的一个关键接口,它是`HibernateDaoSupport`类的一个重要方法。在Spring MVC(S2SH,即Struts2、Spring和Hibernate的组合)架构中,`...
"JSP 中调用 DAO 的 getHibernateTemplate() 时报空指针异常的解决方法" 在整合 SSH 框架时,经常会遇到 JSP 中调用 DAO 的 getHibernateTemplate() 时报空指针异常的错误。本文将讲解这个问题的原因和解决方法。 ...
`getHibernateTemplate()`是Spring框架与Hibernate集成时提供的一个便捷方法,它封装了对Hibernate Session的操作,使得在Service或DAO层进行数据库交互变得更加简单。 在给定的标题和描述中,提到的是`...
### getHibernateTemplate分页-模糊查询 #### 一、概述 在Java开发中,使用Hibernate进行数据持久化处理是非常常见的做法。特别是在企业级应用中,为了实现高效的数据库操作与管理,开发者经常需要对数据进行分页...
### getHibernateTemplate()查询详解 #### 一、`find(String queryString)` 此方法用于执行一个HQL查询,其中`queryString`参数表示一个HQL查询字符串。例如: ```java this.getHibernateTemplate().find("from ...
当使用Hibernate的`getHibernateTemplate().save()`方法尝试保存数据时,如果数据没有被保存到数据库,可能有以下几个原因: 1. **事务管理**:在默认情况下,Hibernate不会自动开启和提交事务。如果在代码中没有...
其中,`HibernateTemplate`类作为Spring框架对Hibernate的支持之一,提供了丰富的数据操作方法,大大简化了开发者的工作量。接下来,我们将深入探讨`HibernateTemplate`中的一些核心方法及其应用场景。 #### 一、...
`findByNamedQuery` 方法允许通过预先定义好的命名查询来执行查询操作,这种方式能够进一步简化代码。例如: - **定义命名查询**:首先在`User.hbm.xml`文件中定义命名查询,如下所示: ```xml <![CDATA...
throw new CommonServiceException("findObjs hql 不应为 null"); } else { try { ret = getHibernateTemplate().executeFind( new HibernateCallback() { public Object doInHibernate(Session session) ...
### Spring框架中HQL查询方法详解 在Spring框架与Hibernate技术结合使用时,HQL(Hibernate Query Language)作为对象查询语言被广泛应用于数据查询操作之中。本文将详细解析Spring框架中常用的HQL查询方法及其应用...
"hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。...这些方法可以帮助我们更好地控制数据库查询,并解决一些复杂的查询问题。
使用 Hibernate 的方法可以通过 getHibernateTemplate 里面提供的 save,update,delete,find 等方法实现。同时,Spring 也提供了事务管理,用于管理 Hibernate 中的事务操作。 本文档总结了 SSH 面试题库,涵盖了...
在Java EE环境中,Struts2、Hibernate和Spring这三大框架的整合为实现分页提供了一种高效的方法。下面将详细介绍如何在Struts2中结合Hibernate进行分页处理。 首先,我们需要在DAO层实现分页查询。在本例中,我们...
// 在数据库中,name字段不允许为null session.save(stu1); session.flush(); // 实际上,如果不是程序员"手痒"来调用这个flush(), HibernateTemplate中session的事务处理还是很方便的 Student stu2 = new ...
其中,`HibernateTemplate`作为Spring框架中的一个重要组件,为开发者提供了丰富的API来处理数据库操作,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的数据访问细节。 #### 二、HibernateTemplate简介 ...
### Spring框架中HQL语句的使用方法 在学习Spring框架与Hibernate集成的过程中,掌握HQL(Hibernate Query Language)的使用方法是十分重要的。本文档将详细介绍如何在Spring环境中运用HQL进行数据查询操作,包括...
这是一个很好的文件,希望大家从中能找到自己的又用的部分,并且不断的进步
如示例所示,通过`getHibernateTemplate().execute()`方法传递一个`HibernateCallback`,然后在回调方法中创建并执行`CallableStatement`。这使得在Java应用程序中直接调用数据库的存储过程成为可能,提高性能并简化...