使用spring petclinic示例和hsqldb的jpa查询语法

时间:2013-09-05 17:56:59

标签: java spring hibernate spring-mvc jpa

我正在使用Spring PetClinic application来学习Spring和Hibernate编程,我正在尝试使用JPA返回一个猫主列表。因此我在OwnerRepository和JpaOwnerRespository类中添加了一个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();
}  

我计划稍后输出一个单独的网页,列出猫主人,另一个上市狗主人等。对于每个页面,我将有一个表格,其中包含所有者姓名,地址和特定类型的宠物名称。页面约束(仅限猫或狗等。)

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

我只想立即获取findByPetType()方法。如果我可以从一个好的查询开始,我会自己把其余部分放在一起。我在哪里可以阅读有关此语法的内容?如果我正确理解它,它似乎是将java对象引用与数据库元素混合在一起。

1 个答案:

答案 0 :(得分:1)

您可能缺少一个 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");