Hibernate:参数值与预期类型不匹配?

时间:2016-03-25 19:34:59

标签: hibernate

当我尝试跑步时:

List<MappingInstruction> result = emFactory.get()
          .createQuery("FROM " + MappingInstruction.class.getSimpleName() + " c where c.mapping = :mapping",
              MappingInstruction.class).setParameter("mapping", mappingInfo.getId()).getResultList();

我明白了:

  

服务异常执行操作“MappingAddAction”,   java.lang.IllegalArgumentException:参数值[5118]没有   匹配预期类型   [com.vernuso.trust.server.domain.clientimport.MappingInfo(n / a)]

我在Eclipse中调试,mappingInfo.getId()确实返回5118。

有人可以帮助我理解为什么它希望类型为MappingInfo而不是long

我有两张桌子,如下图所示。 MappingInfo与MappingInstruction表具有一对多关系。

enter image description here

1 个答案:

答案 0 :(得分:1)

仔细观察:

List<MappingInstruction> result = emFactory.get()
          .createQuery("FROM " + MappingInstruction.class.getSimpleName() + " c where c.mapping = :mapping",
              MappingInstruction.class).setParameter("mapping", mappingInfo.getId()).getResultList();

您是从 MappingInstruction 实体中获取的。在where条件中, c.mapping 的类型为 MappingInfo 。请检查 MappingInstruction 类中的映射变量的数据类型。

因为 c.mapping 的类型为 MappingInfo ,但是您要传递的是mappingInfo.getId(),这是一个很长的ava.lang。 IllegalArgumentException 投掷。

所以,更正如下:

List<MappingInstruction> result = emFactory.get()
              .createQuery("FROM " + MappingInstruction.class.getSimpleName() + " c where c.mapping = :mapping",
                  MappingInstruction.class).setParameter("mapping", mappingInfo).getResultList();