Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate QueryException:无法解析spring petclinic示例应用程序中的属性_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java hibernate QueryException:无法解析spring petclinic示例应用程序中的属性

Java hibernate QueryException:无法解析spring petclinic示例应用程序中的属性,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有以下JPA方法: @SuppressWarnings("unchecked") public Collection<Owner> findByPetType(Integer typeID) { Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets as pet WHERE pet.type_id LIKE :typeID");

我有以下JPA方法:

@SuppressWarnings("unchecked")
public Collection<Owner> findByPetType(Integer typeID) {
    Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets as pet WHERE pet.type_id LIKE :typeID");
    query.setParameter("typeID", typeID + "%");
    return query.getResultList();
}  
这是来自SpringPetClinic示例应用程序,因此所有相关代码,包括数据库定义。我使用的是hsqldb和jpa,上面的findByPetType()方法是我编写的,不在示例应用程序中

有人能告诉我如何修复代码,使其不会产生此错误消息吗

编辑:

我听从亚历克斯的建议,将pet.type_id改为pet.type。现在它给了我以下错误消息(typeID的值设置为1):

第二次编辑:

我提出了Sergi Almar的建议,现在它抛出了以下错误:

Parameter value [1%] did not match expected type [java.lang.Integer]; nested exception   
is java.lang.IllegalArgumentException: Parameter value [1%] did not match expected type   
[java.lang.Integer]  

我检查了,调用代码将typeID初始化为“Integer typeID=1”;因此我不确定它为什么在这里看不到整数。

pet.type\u id
更改为
pet.type
。您必须在
HQL

中使用实体的映射属性(而不是列名),因为这是一个JPQL查询,您应该在查询中使用实体属性(Pet有一个具有id的PetType)。以下代码将执行您期望的操作:

@SuppressWarnings("unchecked")
public Collection<Owner> findByPetType(Integer typeID) {
     Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets as pet WHERE pet.type.id = :typeID");
    query.setParameter("typeID", typeID);
    return query.getResultList();
}  
@SuppressWarnings(“未选中”)
公共集合findByPetType(整数类型ID){
Query Query=this.em.createQuery(“从所有者所有者中选择不同的所有者左加入fetch owner.pets作为宠物,其中pet.type.id=:typeID”);
query.setParameter(“typeID”,typeID);
返回query.getResultList();
}  

谢谢+谢谢你的帮助。我把一个编辑我的原始张贴上面的结果,尝试你的建议。typeID是一个整数,作为值1传入。您是否有办法修复因尝试您的建议而导致的新错误消息?谢谢+谢谢你的帮助。我在上面的原始帖子的第二次编辑中发布了尝试你的建议的结果。你能告诉我如何通过新的错误消息吗?复制我发布的代码,我自己测试过,它可以工作。注意,您需要在查询中定义id(pet.type.id),而不是类型对象。同时删除%设置参数时是的,删除%是问题所在。非常感谢。
Parameter value [1%] did not match expected type [java.lang.Integer]; nested exception   
is java.lang.IllegalArgumentException: Parameter value [1%] did not match expected type   
[java.lang.Integer]  
@SuppressWarnings("unchecked")
public Collection<Owner> findByPetType(Integer typeID) {
     Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets as pet WHERE pet.type.id = :typeID");
    query.setParameter("typeID", typeID);
    return query.getResultList();
}