Java 使用SpringPetClinic示例和hsqldb的jpa查询语法

Java 使用SpringPetClinic示例和hsqldb的jpa查询语法,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我正在使用来学习Spring和Hibernate编程,我正在尝试使用JPA返回猫主人的列表。因此,我向OwnerRepository和JPAOOwnerRepository类添加了一个findByPetType()方法。我的问题是如何编写查询。目前我正在使用hsqldb数据库。以下是我目前的代码: @SuppressWarnings("unchecked") public Collection<Owner> findByPetType(String typeID) { //

我正在使用来学习Spring和Hibernate编程,我正在尝试使用JPA返回猫主人的列表。因此,我向OwnerRepository和JPAOOwnerRepository类添加了一个findByPetType()方法。我的问题是如何编写查询。目前我正在使用hsqldb数据库。以下是我目前的代码:

@SuppressWarnings("unchecked")
public Collection<Owner> findByPetType(String typeID) {
    // using 'join fetch' because a single query should load both owners and pets
    Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE pet.type_id LIKE :typeID");
    query.setParameter("typeID", typeID + "%");
    return query.getResultList();
}  
@SuppressWarnings(“未选中”)
公共集合findByPetType(字符串类型ID){
//使用“join fetch”,因为单个查询应同时加载所有者和宠物
Query Query=this.em.createQuery(“从owner-owner-left中选择不同的所有者加入fetch-owner.pets WHERE-pet.type_-id LIKE:typeID”);
query.setParameter(“typeID”,typeID+“%”);
返回query.getResultList();
}  
我计划稍后输出一个单独的网页,列出猫主人、另一个狗主人等。对于这些网页中的每一个,我都会有一个表,其中包含所有者名称、地址和特定类型的宠物名称,这些名称由页面约束指示(仅限猫或狗等)

有人能告诉我如何更改上面的查询,以便它返回我想要的结果集吗

我现在只想获取findByPetType()方法。如果我能从一个好的查询开始,我会自己尝试把它的其余部分放在一起。我在哪里可以读到这个语法?如果我理解正确的话,它似乎将java对象引用与数据库元素混为一谈。

您可能缺少一个as子句,该子句告诉Hibernate
owner.pets从此将被称为
pet
。尝试更改代码,如下所示:

Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets as pet WHERE pet.type_id LIKE :typeID");