gpt4 book ai didi

hibernate - 使用 @NamedQuery 进行单列选择(J2EE/JPA、Hibernate)是一个好习惯吗?

转载 作者:行者123 更新时间:2023-12-02 22:44:37 25 4
gpt4 key购买 nike

我正在开发使用 Hibernate 作为其持久性提供程序的 J2EE 6 代码库。我的经验更多地在于 Spring,我对 JPA 注释和类似的东西相当陌生,但我在所有实体类中注意到了很多这样的内容,这让我感到惊讶 - 我认为 @NamedQuery 更适合复杂的 SQL?当然,这些简单的选择(以及在 hibernate 映射中定义的连接)可以在不编写 SQL 的情况下完成吗?

In the Entity:
@NamedQueries({
@NamedQuery(name = "DealRaw.findByrawUrl", query = "SELECT d FROM DealRaw d WHERE d.rawUrl = :rawUrl"),
@NamedQuery(name = "DealRaw.findByState", query = "SELECT d FROM DealRaw d WHERE d.state = :state"),
.... etc ....
})

然后

In the Service Class
Query qR=_em.createNamedQuery("DealRaw.findByrawUrl"); //_em is an EntityManager
qR.setParameter("rawUrl", value);
List<DealRaw> dRs=(List <DealRaw>)qR.getResultList();

最佳答案

这些查询不是 SQL 查询,而是 JPQL 查询。您可以将任何类型的查询放入命名查询中,无论复杂与否。

它们都有相同的优点:

  • JPA 引擎在启动时解析并验证查询,并可能缓存解析结果以避免一次又一次地解析。
  • 相同的查询可以轻松地在代码中的多个位置使用(尽管这会是有问题的设计)

它们都有相同的缺点,IMO:查询没有在使用的地方定义,因此代码更难理解。

无论这些查询是否已命名,您都必须编写这些查询来执行它们。加载实体的唯一其他方法是使用它们的 ID 查找它们(这里不是这种情况),或者使用关联从一个实体导航到另一个实体(这也不是这种情况)。

关于hibernate - 使用 @NamedQuery 进行单列选择(J2EE/JPA、Hibernate)是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com