Junit测试的错误为:
java.lang.NullPointerException
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:140)
at org.hxwl.tm.DAOImpl.AdDAOImpl.save(AdDAOImpl.java:43)
at org.hxwl.tm.test.TestAdDAOImpl.testSave(TestAdDAOImpl.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
java.lang.NullPointerException
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:140)
at org.hxwl.tm.DAOImpl.AdDAOImpl.save(AdDAOImpl.java:43)
at org.hxwl.tm.test.TestAdDAOImpl.testSave(TestAdDAOImpl.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
解决方案 »
- HR项目问题
- 集思广义-帮忙提个好的建议
- 跪求高手帮忙解决sql server2005连不上
- mondrian使用 在线等待....
- 用MyEclipse运行uddi4j示例程序产生错误
- 请问,我怎么在Spring中注入这个类。
- netbeans中文显示问题
- 新手问最简单的问题:swing的JMenu,谢谢.
- 关于JTABLE的问题
- 下载安装j2re-1_4_0_04-windows-i586-i.exe,安装完找不到javac.exe
- 请教Servlet中getServletContext和getServletConfig的区别
- 基于axis开发的webservice项目与其它java应用整合出现的问题。
public void save(Ad ad) throws Exception {
System.out.println(ad.getDate());
super.getSession().save(ad);
}super改成this
不过依然应该用this
毕竟是这个对象在使用
另外你检查一下有没有在applicationContext.xml里给这个BEAN配置模板的参照
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
还有个问题是 我就TEACHER表和AD表的所有配置都是一样的,
但TEACHER相关的方法是可以用的,一点错误没有,而关于AD的相关方法就不行!!
package org.hxwl.tm.DAOImpl;import java.util.List;import org.hibernate.Query;
import org.hxwl.tm.IDAO.ITeacherDAO;
import org.hxwl.tm.vo.Teacher;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class TeacherDAOImpl extends HibernateDaoSupport implements ITeacherDAO { @Override
public void delete(String name) throws Exception {
String hsql = "delete from Teacher as t where t.name = ?";
Query q = super.getSession().createQuery(hsql);
q.setString(0, name);
q.executeUpdate();
} @Override
public List findAll() throws Exception {
String hsql = "from Teacher";
Query q = super.getSession().createQuery(hsql);
List list = q.list();
return list;
} @Override
public Teacher findByName(String name) throws Exception {
String hsql = "from Teacher as t where t.name = ?";
Query q = super.getSession().createQuery(hsql);
q.setString(0, name);
Teacher teacher = (Teacher)q.list().get(0);
return teacher;
} @Override
public void save(Teacher teacher) throws Exception {
System.out.println("测试insert DAOImpl");
System.out.println(teacher.getName());
System.out.println(teacher.getBirth());
super.getSessionFactory().openSession().save(teacher);
// super.getSession().save(teacher);
} @Override
public boolean isExists(String name) throws Exception {
String hsql = "from Teacher as t where t.name = ?";
Query q = super.getSession().createQuery(hsql);
q.setString(0, name);
List list = q.list();
if(list.size()>0)
return true;
else
return false;
} @Override
public boolean login(Teacher teacher) throws Exception {
boolean flag = false;
String hsql = "from Teacher as t where t.name=? and t.password=?";
Query q = super.getSession().createQuery(hsql);
q.setString(0, teacher.getName());
q.setString(1, teacher.getPassword());
List all = q.list();
if (all.size() > 0) {
flag = true;
}
return flag;
} @Override
public void update(Teacher teacher) throws Exception {
super.getSession().update(teacher); }}
public void save(Teacher teacher) throws Exception {
System.out.println("测试insert DAOImpl");
System.out.println(teacher.getName());
System.out.println(teacher.getBirth());
super.getSessionFactory().openSession().save(teacher);
// super.getSession().save(teacher);
}super.getSessionFactory().openSession().save(teacher);
这一句是我在后来做的时候改的,原来是:
super.getSession().save(teacher);
相关代码贴出来。
还有就是,别资料说是session没取到,你就以为你的也是因为这样啊!
null.save()或者XXX.save(null)一样会出现NullPointException;
打印一下session,看是不是真的为NULL再这么问。
查查到底是哪个变量为NULL,不然白忙!
那么你应该使用this.getSession()的方法来取得session
getSession()是NULL,没办法获取!!!
但在另外的Teacher的TeacherDAOImpl中,用同样的方法(即:super.getSession())是可以获取Session!!!
使用openSession()方法也不行的,还是获取不到!!
Spring的applicationContext.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourse"
class="org.springframework.jndi.JndiObjectFactoryBean"
destroy-method="close">
<property name="jndiName" value="java:comp/env/jdbc/tm"></property>
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSourse" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<!-- 表示允许自动提交 -->
<prop key="hibernate.connection.autocommit">true</prop>
<!-- 显示sql语句 -->
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/hxwl/tm/vo/Admin.hbm.xml</value>
<value>org/hxwl/tm/vo/Ad.hbm.xml</value>
<value>org/hxwl/tm/vo/Teacher.hbm.xml</value>
<value>org/hxwl/tm/vo/Stipend.hbm.xml</value>
<value>org/hxwl/tm/vo/ResearchCase.hbm.xml</value>
<value>org/hxwl/tm/vo/TeachResearchCase.hbm.xml</value>
<value>org/hxwl/tm/vo/AuditionCase.hbm.xml</value>
<value>org/hxwl/tm/vo/CheckWork.hbm.xml</value>
<value>org/hxwl/tm/vo/EduCase.hbm.xml</value>
<value>org/hxwl/tm/vo/Evection.hbm.xml</value>
<value>org/hxwl/tm/vo/OperationCase.hbm.xml</value>
<value>org/hxwl/tm/vo/RewardsAndPunishment.hbm.xml</value>
<value>org/hxwl/tm/vo/TeacherValueByStudent.hbm.xml</value>
<value>org/hxwl/tm/vo/TrainCase.hbm.xml</value></list>
</property>
</bean> <bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- interface -->
<bean id="iAdminDAO" class="org.hxwl.tm.IDAO.IAdminDAO" abstract="true"></bean>
<bean id="iAdDAO" class="org.hxwl.tm.IDAO.IAdDAO" abstract="true"></bean>
<bean id="iTeacherDAO" class="org.hxwl.tm.IDAO.ITeacherDAO" abstract="true"></bean><!-- daoImpl -->
<bean id="iAdminDAOImpl" class="org.hxwl.tm.DAOImpl.AdminDAOImpl"
parent="iAdminDAO">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>
<bean id="iAdDAOImpl" class="org.hxwl.tm.DAOImpl.AdDAOImpl"
parent="iAdDAO">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>
<bean id="iTeacherDAOImpl" class="org.hxwl.tm.DAOImpl.TeacherDAOImpl"
parent="iTeacherDAO">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean><!-- struts action --><!-- others -->
<bean name="/index" class="org.hxwl.tm.struts.action.IndexAction">
<property name="adDAOImpl">
<ref bean="iAdDAOImpl" />
</property>
</bean>
<!-- admin -->
<bean name="/adminLogin"
class="org.hxwl.tm.struts.action.AdminAction">
<property name="admindao">
<ref bean="iAdminDAOImpl" />
</property>
</bean>
<bean name="/jsp/admin/admin"
class="org.hxwl.tm.struts.action.AdminAction">
<property name="admindao">
<ref bean="iAdminDAOImpl" />
</property>
</bean>
<!-- showAd -->
<bean name="/showAd" class="org.hxwl.tm.struts.action.ShowAdAction">
<property name="adDAOImpl">
<ref bean="iAdDAOImpl"/>
</property>
</bean>
<!-- ad -->
<bean name="/jsp/admin/ad" class="org.hxwl.tm.struts.action.AdAction">
<property name="adDAOImpl">
<ref bean="iAdDAOImpl"/>
</property>
</bean>
<bean name="/jsp/admin/listAd_manage" class="org.hxwl.tm.struts.action.ListAd_manageAction">
<property name="adDAOImpl">
<ref bean="iAdDAOImpl"/>
</property>
</bean>
<bean name="/jsp/admin/updateAd" class="org.hxwl.tm.struts.action.UpdateAdAction">
<property name="adDAOImpl">
<ref bean="iAdDAOImpl"/>
</property>
</bean>
<!-- teacher -->
<bean name="/jsp/admin/teacher" class="org.hxwl.tm.struts.action.TeacherAction">
<property name="teacherDAOImpl">
<ref bean="iTeacherDAOImpl"/>
</property>
</bean>
</beans>
报错为:java.lang.NullPointerException
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:140)
at org.hxwl.tm.DAOImpl.AdDAOImpl.save(AdDAOImpl.java:43)另外还有:
INFO - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
INFO - SQLErrorCodes loaded: [DB2, HSQL, MS-SQL, MySQL, Oracle, Informix, PostgreSQL, Sybase]
public void save(Ad ad) throws Exception {
getHibernateTemplate().save(ad);
}
这样也不的行,要报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' er from transaction definition
这样也不的行,要报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' er from transaction definition
这样也不的行,要报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' er from transaction definition
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
class="org.springframework.jndi.JndiObjectFactoryBean"
destroy-method="close">
<property name="jndiName" value="java:comp/env/jdbc/tm"> </property>
</bean>
appication中这么写取不到数据源的楼主,如果你是weblogic的话也得需要一个对象模版才行啊建议你junit的时候
这么写
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=bugtrack</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>sa</value>
</property>
</bean>
例如:
一个简单的分页查询:public List findByPage(final String hql,
final int offset, final int pageSize){
List list =
getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session arg0) //得到回调中的session
throws HibernateException, SQLException {
// TODO Auto-generated method stub
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
public XXXX findByNameAndMonth(String name, Date date)
throws DataException {
XXXX year = null;
String sql ="select * from t_uday_" + (date.getMonth()+1)
+"where login_name=? and logout_date=?";
SQLQuery query = null;
try {
query = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession() //取到当前Session
.createSQLQuery(sql);
query.addEntity(XXXX.class); query.setString(0, name);
query.setDate(1, date); year = (XXXX) query.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return year;
}
其他简单的操作,使用getHibernateTemplate()已经足够满足了。
我试了下这个方法,还是不行,还是去不到Session,
但使我高兴的是试过这个后,再还原为原来的后,程序又完全正确了,没有一点问题!!!!
现在可以向数据库里添加数据了,程序的流程也完全正确!!!!