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

标签 java servlets jpa named-query

我目前正在学习 JPA NamedQueries 并尝试在 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 时必须将它放在 Entity 类中?

最佳答案

GuestServlet 不是由您的 jpa 提供商管理的。 Hibernate(或其他)根本不知道命名查询。

关于java - 为什么我需要将@NamedQuery 放在实体类上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31982267/

相关文章:

java - Spring Hello world 不工作-404 错误

java - Entity Beans 不允许定义 Map<String, Object> 属性

java - 是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?

Java Servlet - 从 html 文件输入中获取 byte[] 内容

spring - 没有 Guice/Spring 的 JPA 交易痛苦更少

java - Spring Redis Cache中如何序列化多种类型?

java - 如何在数据库中保存大文件?

java - Tomcat 如何在没有部署描述符(web.xml)的情况下启动应用程序?

java - 如何在 JPA 中使用 CASE, WHEN

具有数据库支持最佳实践的 Java 枚举