JPA的JQL in查询问题

坚持奋斗中1 2010-06-13 04:21:33
最近的一个项目是使用struts1.3+spring2.5+jpa框架。之前都是用hibernate3.3,现在想试着学习用下jpa技术(orm技术规范)。
在写jql语句时遇到一个问题:
Integer[] id=new Integer{1,2,3,4,5};
Query getRowsQuery = em.createQuery("select o from UserModel o where o.fd_id in(:fd_id)");
getRowsQuery.setParameter("fd_id",id);

这样预赋值时,程序报错。我记得hibernate处理这类问题时,预赋值都是
query.setParameterList("fd_id",new Integer[] {1,2,3,4,5});

请高手指点指点,谢谢... ...
...全文
699 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
忧云 2011-01-02
  • 打赏
  • 举报
回复
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
Map<String, Object> params = new HashMap<String, Object>();
params.put("ids", ids);
String jpql = "select o from oa_usersroles o where o.role.id in(:ids)";
List<Module> modules = em.createQuery(jpql).setParameter("ids", ids).getResultList();

测试通过了,可以这样做。上面例子你看看。
忧云 2011-01-02
  • 打赏
  • 举报
回复
不过是单个的。多个的我也在找。
忧云 2011-01-02
  • 打赏
  • 举报
回复
在写jql语句时遇到一个问题:
Integer[] id=new Integer{1,2,3,4,5};
Query getRowsQuery = em.createQuery("select o from UserModel o where o.fd_id =:fd_id");
getRowsQuery.setParameter("fd_id",id);

这样写.
坚持奋斗中1 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 woshilisao 的回复:]
fd_id是主键吗 换成=试试
[/Quote]
是主键,用=的话也只能是等于一个值而已,我现在是想实现,fd_id in (多个值)。
2010-06-13 15:59:22 StandardWrapperValve[struts]: Servlet.service() for servlet struts threw exception
java.lang.ClassCastException: [Ljava.lang.Integer;
at org.hibernate.type.IntegerType.set(IntegerType.java:64)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:61)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
qingzhe2008 2010-06-15
  • 打赏
  • 举报
回复
程序报错?报什么错呢?

应该把错误也贴出来
woshilisao 2010-06-14
  • 打赏
  • 举报
回复
fd_id是主键吗 换成=试试
坚持奋斗中1 2010-06-13
  • 打赏
  • 举报
回复
没人关注吗?自己顶起来

67,513

社区成员

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

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