当我尝试跑步时:
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表具有一对多关系。
答案 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();