我目前正在学习有关JPA NamedQueries的信息,并尝试在GuestServlet中使用它:

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

当我将@NamedQuery放在Entity类中时,它将起作用:
@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(或其他任何东西)根本不知道命名查询。

09-03 19:04