java - 为什么需要在实体类上放置@NamedQuery?

我目前正在学习jpa namedquerys并尝试在guestservlet中使用它:

Query getGuests =  em.createNamedQuery("myq");
@SuppressWarnings("unchecked")
List<Guest> guests = getGuests.getResultList();

当我将@namedquery放在实体类中时,它就工作了:
@Entity
@NamedQuery(
    name="myq",
    query = "SELECT g FROM Guest g")
public class Guest {
  ...
}

但是当我尝试在servlet中使用它时,如下所示:
@WebServlet({"/GuestServlet","/guest"})
@NamedQuery(
        name="myq",
        query = "SELECT g FROM Guest g")
public class GuestServlet extends HttpServlet {...}

我得到以下错误:
java.lang.IllegalArgumentException: No query defined for that name [myq]

为什么当我在servlet中使用@namedquery时,我不得不将它放在实体类中?


最佳答案:

GuestServlet不由JPA提供商管理。hibernate(或其他)根本不知道命名查询。

译文:来源   文章分类: java servlets jpa named-query

相关文章:

java - 使用JDBC连接到MySQL的问题

java - Java类文件编辑器

java - 有没有办法防止单元测试和测试的类之间的耦合

java - 什么是Java中的try catch中的圆括号/括号()[关闭]

java - 从Spring MVC Servlet安排运行时间很长的进程的最佳方法

java - 检索插入顺序中的LinkedHashSet元素并将其保存到局部变量

java - 如何在java中使用本地HTTPS URL?

java - 杰克逊在序列化上触发JPA Lazy Fetching

java - 单次战争部署的多上下文根目录jboss-EAP-6.1

java - 是否可以将字符串作为参数添加到传统的for循环中?