使用泛型DAO 报错!!?

jiazimo 2010-09-06 04:29:56


代码如下:
package com.flsoft.hgjlserver.orm;

import java.io.Serializable;

public interface ITestDao<T extends Serializable, PK extends Serializable> {

public T findById(PK id);
}

// 实现 :
package com.flsoft.hgjlserver.ormImpl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.flsoft.hgjlserver.orm.ITestDao;

public class TestDao <T extends Serializable, PK extends Serializable>
extends HibernateDaoSupport implements ITestDao<T, PK>{

// 实体类类型(由构造方法自动赋值)
private Class<T> entityClass;

// 构造方法,根据实例类自动获取实体类类型
public TestDao() {
this.entityClass = null;
Class c = getClass();
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType) {
Type[] p = ((ParameterizedType) t).getActualTypeArguments();
this.entityClass = (Class<T>) p[0];
}
}

public T findById(PK id) {
// TODO Auto-generated method stub
return (T) getHibernateTemplate().get(entityClass, id);
}
}
// 具体dao接口:
package com.flsoft.hgjlserver.orm;

import com.flsoft.hgjlserver.module.Task;

public interface ITaskTes extends ITestDao<Task, Long>{
}

// 它的实现:
package com.flsoft.hgjlserver.ormImpl;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.flsoft.hgjlserver.module.Task;
import com.flsoft.hgjlserver.orm.ITaskTes;
import com.flsoft.hgjlserver.orm.ITestDao;

public class TaskTest extends TestDao<Task, Long> implements ITaskTes{

ITestDao<Task, Long> tdao;

public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(
"E:/MyEclipseworkspace/HGJL/HGJLServerDao/src/test/resources/applicationContext.xml");
ITaskTes taskTes = (ITaskTes) ac.getBean("TaskTest");
System.out.println(taskTes.findById(new Long(49)).getTstate());
}

public TaskTest(){}

public Task findById(Long id) {
// TODO Auto-generated method stub
return tdao.findById(id);
}

public ITestDao<Task, Long> getTdao() {
return tdao;
}

public void setTdao(ITestDao<Task, Long> tdao) {
this.tdao = tdao;
}

}
[/code]
//配置:
<bean id="DaoTest" class="com.flsoft.hgjlserver.ormImpl.TestDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="TaskTest" class="com.flsoft.hgjlserver.ormImpl.TaskTest">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="tdao">
<ref bean="DaoTest"/>
</property>
</bean>

报错误如下:
[DEBUG] [org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:316)] ctoryUtils - Opening Hibernate Session
[DEBUG] [org.hibernate.impl.SessionImpl.<init>(SessionImpl.java:220)] essionImpl - opened session at timestamp: 12837607548
[DEBUG] [org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession(SessionFactoryUtils.java:789)] ctoryUtils - Closing Hibernate Session
Exception in thread "main" java.lang.NullPointerException
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at org.springframework.orm.hibernate3.HibernateTemplate$1.doInHibernate(HibernateTemplate.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:512)
at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:506)[DEBUG] [org.hibernate.impl.SessionImpl.close(SessionImpl.java:273)] essionImpl - closing session
[DEBUG] [org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:375)] ionManager - connection already null in cleanup : no action

at com.flsoft.hgjlserver.ormImpl.TestDao.findById(TestDao.java:30)
at com.flsoft.hgjlserver.ormImpl.TaskTest.findById(TaskTest.java:25)
at com.flsoft.hgjlserver.ormImpl.TaskTest.findById(TaskTest.java:1)
at com.flsoft.hgjlserver.ormImpl.TaskTest.main(TaskTest.java:18)


帮忙指点一下哪儿错了,是不是session没有给?
谢谢!!
...全文
180 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ingram_me 2010-09-07
  • 打赏
  • 举报
回复
未进行事务处理 HibernateTemplate默认不进行事务处理,而在Hibernate中这些操作必须在事务下执行才能得到正确的结果
<bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
spring声明式事务管理...
wanding_ 2010-09-06
  • 打赏
  • 举报
回复
麻烦你测试下,session有没有取到啊,十有八久配置文件有问题 SessionImpl。
测试不会用Junit么
shanxmxj 2010-09-06
  • 打赏
  • 举报
回复
[org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:375)] ionManager - connection already null in cleanup : no action

at com.flsoft.hgjlserver.ormImpl.TestDao.findById(TestDao.java:30)
at com.flsoft.hgjlserver.ormImpl.TaskTest.findById(TaskTest.java:25)
at com.flsoft.hgjlserver.ormImpl.TaskTest.findById(TaskTest.java:1)
at com.flsoft.hgjlserver.ormImpl.TaskTest.main(TaskTest.java:18)


connection already null in cleanup
在清除连接的时候已经为空了。
jiazimo 2010-09-06
  • 打赏
  • 举报
回复
在线等....哪位帮忙指点一下..!!

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧