【问题标题】:jpa query syntax using spring petclinic sample and hsqldb使用 spring petclinic 示例和 hsqldb 的 jpa 查询语法
【发布时间】:2013-09-05 17:56:59
【问题描述】:

我正在使用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 对象引用与数据库元素混合在一起。

【问题讨论】:

    标签: java spring hibernate spring-mvc jpa


    【解决方案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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 2015-02-21
      • 2017-12-14
      • 1970-01-01
      • 2010-12-10
      • 2020-09-22
      • 1970-01-01
      • 2013-09-09
      相关资源
      最近更新 更多