我目前正在学习JPA NamedQueries并尝试在GuestServlet中使用它:
@Entity
@NamedQuery(
name="myq",
query = "SELECT g FROM Guest g")
public class Guest {
...
}
当我将@NamedQuery放在Entity类中时,它可以工作:
@WebServlet({"/GuestServlet","/guest"})
@NamedQuery(
name="myq",
query = "SELECT g FROM Guest g")
public class GuestServlet extends HttpServlet {...}
但是当我尝试在Servlet中使用它时如下:
java.lang.IllegalArgumentException: No query defined for that name [myq]
我收到以下错误:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def get_csrf_token(request):
c = {}
c.update(csrf(request))
print c
return render_to_response('csrf.html', c)
@csrf_exempt
def confirm_email(request):
print 'here'
return JsonResponse({'response': 0})
为什么在Servlet中使用它时,我被迫将@NamedQuery放在Entity类中?
答案 0 :(得分:2)
GuestServlet不由您的jpa提供商管理。 Hibernate(或其他)根本不知道命名查询。
答案 1 :(得分:2)
查看documentation of @NamedQuery:
在Java Persistence查询中指定静态的命名查询 语言。查询名称的范围限定为持久性单元。该 NamedQuery注释可以应用于实体或映射 超类。
注释被固定到持久性单元。 Servlet不在此范围内。
答案 2 :(得分:0)
@NamedQuery
Javadoc中记录了这一点。即,
NamedQuery注释可以应用于实体或映射的超类。