Hibernate3+Spring2中数据检索问题

wonderh 2008-06-13 09:17:31
我在用struts2+hibernate3+spring2是遇到一个关于数据查询的问题,详细内容如下(请各位高人指点):

this.getHibernateTemplate().find("from TBook as tb where tb.TInfo=?",id);
this.getHibernateTemplate().findByNamedParam("from TBook as tb where tb.TInfo=:tid","tid",id)
报错:java.lang.ClassCastException

直接操作Hibernate就没问题
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query query = session.createQuery("from TBook as tb where tb.TInfo=:tid");
query.setString("tid", id);
List data = query.list();

原因在呢里?从表面上看hql应该是正确的,可就是报异常,晕,哪位大侠给支个招,小弟不胜感激。
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
henry2599 2008-09-18
  • 打赏
  • 举报
回复
tb.TInfo 是你的Book中的Info对象吧.
应该tb.TInfo.id

whetu 2008-06-14
  • 打赏
  • 举报
回复
类型转换错误,估计和你的主键是varchar型有关。
wangchm168 2008-06-13
  • 打赏
  • 举报
回复
应该是id数据类型问题,你把所有的参数值打印出来看看
wonderh 2008-06-13
  • 打赏
  • 举报
回复
异常的的具体内容:
exceptionStack java.lang.ClassCastException: java.lang.String at org.hibernate.type.EntityType.toLoggableString(EntityType.java:154) at org.hibernate.pretty.Printer.toString(Printer.java:65) at org.hibernate.engine.QueryParameters.traceParameters(QueryParameters.java:271) at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:151) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:839) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362) at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:830) at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:826) at work.dao.hibernate.TBookDaoHiernate.getAllBooksByTeacherID(TBookDaoHiernate.java:45) at work.service.impl.TBookServiceImpl.getAllBooksByTeacherID(TBookServiceImpl.java:33) at work.web.action.TeacherBook.viewTeacherBook(TeacherBook.java:41) 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:585) at
.....

下面是上述操作所涉及的表:

CREATE TABLE `t_book` (
`id` varchar(32) NOT NULL,
`bookid` varchar(32) NOT NULL COMMENT '图书编号',
`teacherid` varchar(32) NOT NULL COMMENT '老师编号',
`signorder` tinyint(2) NOT NULL default '1' COMMENT '署名次序',
PRIMARY KEY (`id`),
KEY `teacherid` (`teacherid`),
KEY `bookid` (`bookid`),
CONSTRAINT `t_book_fk` FOREIGN KEY (`teacherid`) REFERENCES `t_info` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `t_book_fk1` FOREIGN KEY (`bookid`) REFERENCES `bookinfo` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='出版列表';
CREATE TABLE `t_info` (
`id` varchar(32) NOT NULL,
`typeid` varchar(32) NOT NULL COMMENT '教师类型',
`departmentid` varchar(32) NOT NULL COMMENT '隶属单位',
`name` varchar(32) NOT NULL COMMENT '姓名',
`loginname` varchar(32) NOT NULL COMMENT '登录名',
`sex` bit(1) NOT NULL default '\0' COMMENT '性别1:男0:女',
`birth` date NOT NULL COMMENT '出生日期',
`nationality` varchar(32) default NULL COMMENT '民族',
`party` varchar(32) default NULL COMMENT '政治面貌',
`password` varchar(32) NOT NULL default '12345678' COMMENT '加密后的密码',
`sworktime` date default NULL COMMENT '参加工作时间',
`mtime` date default NULL COMMENT '中级评职时间',
`fgtime` date default NULL COMMENT '副高职评职时间',
`htime` date default NULL COMMENT '高职评职时间',
`isdoctort` bit(1) default NULL COMMENT '是博士生导师?',
`doctortime` date default NULL COMMENT '博导评职时间',
`ismastert` bit(1) default NULL COMMENT '是硕士生导师?',
`mastertime` date default NULL COMMENT '硕导评职时间',
`direction` varchar(200) default NULL COMMENT '研究方向',
`nowtposition` varchar(32) default NULL COMMENT '现任技术职务',
`nowmposition` varchar(32) default NULL COMMENT '现任管理职务',
`lastdegree` tinyint(4) NOT NULL COMMENT '最后学历1本科2硕士3博士',
PRIMARY KEY (`id`),
KEY `typeid` (`typeid`),
KEY `departmentid` (`departmentid`),
CONSTRAINT `t_info_fk` FOREIGN KEY (`typeid`) REFERENCES `t_type` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `t_info_fk1` FOREIGN KEY (`departmentid`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='教师信息表';
CREATE TABLE `bookinfo` (
`id` varchar(32) NOT NULL,
`isbn` varchar(20) NOT NULL COMMENT '书号',
`name` varchar(32) NOT NULL COMMENT '专著名称',
`publishdate` date NOT NULL COMMENT '出版日期',
`publishunit` varchar(200) NOT NULL COMMENT '出版单位',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='出版列表';

id是String型。我想要完成的是:从TBook中找出教师编号为id的记录
Landor2004 2008-06-13
  • 打赏
  • 举报
回复
this.getHibernateTemplate().find("from TBook as tb where tb.TInfo=?",id);
this.getHibernateTemplate().findByNamedParam("from TBook as tb where tb.TInfo=:tid","tid",id)


中的后面的id,请检查一下,看看值是什么,也许和数据库类型不相符合

还有如果相符,请把java.lang.ClassCastException 后面的具体的描述贴出来
yami251139 2008-06-13
  • 打赏
  • 举报
回复
你的id是string的么?
Shine_Panda 2008-06-13
  • 打赏
  • 举报
回复
是你后面接收返回值的时候出了问题把。

67,538

社区成员

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

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