【问题标题】:Hibernate and playframework giving IllegalArgumentException ... was not matching type java.util.MapHibernate 和 playframework 给出 IllegalArgumentException ... 与 java.util.Map 类型不匹配
【发布时间】:2013-03-07 12:12:00
【问题描述】:

当我将应用程序从 2.0.4 迁移到 2.1.0 时,会抛出此异常:

play.api.Application$$anon$1: Execution exception[[IllegalArgumentException: Parameter value [shared.models.Restaurant@f59fc] was not matching type [java.util.Map]]]
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10-2.1.0.jar:2.1.0]
    at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10-2.1.0.jar:2.1.0]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:132) [play_2.10-2.1.0.jar:2.1.0]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:128) [play_2.10-2.1.0.jar:2.1.0]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10-2.1.0.jar:2.1.0]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10-2.1.0.jar:2.1.0]
java.lang.IllegalArgumentException: Parameter value [shared.models.Restaurant@f59fc] was not matching type [java.util.Map]
    at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
    at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:364) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
    at org.hibernate.ejb.criteria.CriteriaQueryCompiler$1$1.bind(CriteriaQueryCompiler.java:194) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
    at org.hibernate.ejb.criteria.CriteriaQueryCompiler.compile(CriteriaQueryCompiler.java:247) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:603) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
    at shared.dao.impl.GenericDAOImpl$QueryQuery.selectCount(GenericDAOImpl.java:273) ~[na:na]

所有modelDao的扩展这个GenericDAOImpl。方法广告第 273 行是:

    Long selectCount(){
        CriteriaBuilder builder = JPA.em().getCriteriaBuilder();
        CriteriaQuery<Long> criteria = builder.createQuery(Long.class);
        Root<T> root = criteria.from( clazz );
        criteria.select(builder.count(root));
        criteria.where(buildWhere(builder, root));
        //buildSelectWhere(builder, root, criteria);
        return JPA.em().createQuery(criteria).getSingleResult();
    }

clazz 变量是扩展 DAO 模型的 .class。 我有点迷失在真正的问题是什么。 顺便说一句,在 2.0.4 中,这工作得很好。

【问题讨论】:

  • 我能够使用 2.1.0 附带的 Computer-Database-JPA 示例复制此问题。只需在某处插入以下内容即可运行,您将看到错误:Company company = Company.findById(1l); List data = JPA.em() .createQuery("from Computer where company = :company") .setParameter("company", company) .setFirstResult(0) .setMaxResults(10) .getResultList();跨度>
  • 我已将其作为问题发布在 github:github.com/playframework/Play20/issues/851

标签: java hibernate jpa playframework-2.1


【解决方案1】:

感谢 Play 开发者的出色工作,这一问题已在 2.1.2 版本中得到修复:

https://github.com/playframework/playframework/pull/851

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 2018-06-14
    • 2019-04-30
    • 2022-01-13
    • 2018-08-17
    • 2016-07-13
    相关资源
    最近更新 更多