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

原文 标签 java servlets jpa named-query

我目前正在学习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 - 从HttpServletRequest获取原始请求字符串

java - 如何使jpa hibernate创建具有多对一但没有外键的实体

java - Spring 4 Hibernate 4 JPA LazyInitializationException:无法延迟初始化角色集合

java - 使用Criteria API进行动态JPA 2.0查询

java - 调用notifyAll的最佳解决方案是什么?

java - 将CSS导入样式/主题

java - KeyFactory.createKey()这是在数据存储区中存储数据的正确方法吗

spring - 在Tomcat上运行项目时出现Spring Filter ClassCastException

jsp - Tomcat JSP解析

java - 将JSON映射到Java对象