java - 我可以将 HQL 与 JPA 的 @Query 注释一起使用吗?
问题描述
我有两个相同的查询。一个正在运行,另一个entityManager.createQuery()
作为. entityManager 查询运行良好,但 @Query 注释中的相同查询返回错误。@Query
PagingAndSortingRepository
可能是因为@Query
注释将查询作为 JPQLentityManager.createQuery()
执行,而将查询作为 HQL 执行?
下面是两个例子:
@Query(不起作用)
@Repository
public interface UserRepository extends PagingAndSortingRepository<User, UUID> {
@Query("select p.user from Perspective p where p.organisation.id = 'c25c86a0-0d8e-4beb-9ba7-e38d932b8410'")
List<User> findUsers();
}
could not resolve property: lastname of: org.jembi.appstore.service.entities.Perspective
// note: lastname is a property of user, not perspective.
entityManager.createQuery (确实有效)
@Autowired
EntityManager entityManager;
@RequestMapping("/query")
@ResponseBody
public void testQuery() {
Query query = entityManager.createQuery("select p.user from Perspective p where p.organisation.id = 'c25c86a0-0d8e-4beb-9ba7-e38d932b8410'");
List<User> users = query.getResultList();
users.forEach(u -> System.out.println(u.getFirstname()));
}
解决方案
@Query("select p.user from Perspective p join User u where p.organisation.id = 'c25c86a0-0d8e-4beb-9ba7-e38d932b8410'")
List<User> findUsers(@Param("organisationId") UUID organisationId, Pageable pageable);
}
我建议您将其重写为:
@Query("select p.user from Perspective p join User u where p.organisation.id = ?1")
List<User> findUsers(String organisationId);
}
为什么String
而不是UUID
?我敢打赌 HQL 不适用于 UUID。+ UUID 可以放在字符串中。
为什么我删除了 Pageable?我在您的查询中找不到您使用第二个参数 [Pageable] 的位置。
推荐阅读
- flutter - 日期倒数计时器
- ruby - 更改嵌入式签名的语言环境
- javascript - 如何禁用 react-admin 的自动刷新功能
- r - 根据不同列中的其他 id 生成新的 id 列
- azure - 使用 Azure 逻辑应用从 Salesforce 获取记录
- amazon-web-services - AWS 命令行查询 EC2 描述可用的网络接口
- javascript - 在移动设备上,我希望在单击 ID 时关闭导航栏
- java - JAVA:如何存储登录用户
- python - 如何使用 python-docx 使文本变为粗体、蓝色、16 号和特定字体?
- node.js - Nock 标头 - 错误:Nock:与请求不匹配