使用criteria按复合主键某个字段条件查询的问题?

wujunliang 2008-04-29 10:21:44
使用以下代码

Criteria criteria = session.createCriteria(ZYxaqStationSignalXy.class);
criteria.add(Expression.eq("id.jkdataId",jkdataId));
criteria.add(Expression.eq("id.jiaoluNo",jlh));
criteria.add(Expression.eq("id.sxx",sxx));
Iterator it= criteria.list().iterator();

其中pojo类ZYxaqStationSignalXy中有复合主键ZYxaqStationSignalXyId id, ZYxaqStationSignalXyId的类型如下:

private Long jkdataId;
private Long jiaoluNo;
private Long sxx;
private Long stationNo;
private Long signalType;

当执行到 Iterator it= criteria.list().iterator(); 时报错:"java.lang.ClassCastException"
,换成hql查询就没有问题:

String hql = "from ZYxaqStationSignalXy as p where p.id.jkdataId=:jkDataId and p.id.jiaoluNo=:jlh and p.id.sxx=:sxx";
Query q = session.createQuery(hql);
q.setString("jkDataId", jkdataId);
q.setString("jlh", jlh);
q.setString("sxx", sxx);
List list = q.list();

请问是怎么回事?会不会是类型问题,复合主键的类是long,用eq方法是不是不行?
...全文
388 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
HHONGZHONG 2012-03-02
  • 打赏
  • 举报
回复
这个情况我也遇过,不知道是不是你的那张有复合主键的表通过HIBERNATE反向生成pojo类,把主键生成为另外一个类,这样的话查找出来的数据就不能转换为对应的pojo类
wujunliang 2008-04-30
  • 打赏
  • 举报
回复
数据库中确实是数字型啊
guy8617 2008-04-29
  • 打赏
  • 举报
回复
是类型的问题,感觉应该是与数据库中的类型不匹配

67,550

社区成员

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

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