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

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

最佳答案

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

关于java - 使用 spring petclinic 示例和 hsqldb 的 jpa 查询语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18642958/

相关文章:

java - Hibernate 在连接到子表时寻找父字段名称

hibernate - 哪个在 hibernate native 查询或 HQL 中的性能更好

java - Spring + hibernate : how can I tell if spring has picked up all the @transactional annotation

java - Spring 数据 - JPA,缺少 ID

java - Spring Boot 1.5.10 间歇性 RestRepositoryController 404 问题?

java - 在java中将KB转换为MB

java - 使用 Websphere 共享库时 Hibernate java.lang.ClassCastException : _$$_javassist_856 cannot be cast to javassist. util.proxy.Proxy

java - android中的聊天应用程序,以便发送者和接收者消息应该在不同的一边

java - Rock Paper Scissors Game Best 2 out of 3 with Loops

java - 我应该如何格式化 3D 引擎的几何实例化过程?