2013-06-29 37 views
0

我在java中收到此错误消息。java createNamedQuery - 实体管理器和持久性

你们有没有人知道我该如何解决这个问题?

HTTP Status 500 - Filter execution threw an exception

类型Exception report

消息Filter execution threw an exception

描述The server encountered an internal error that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: Filter execution threw an exception 
root cause 

java.lang.Error: Unresolved compilation problem: 
The method createNamedQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<User>) 

bg.tu_sofia.cinema.dao.UserDAOImpl.getAllUsers(UserDAOImpl.java:22) 
bg.tu_sofia.cinema.dao.UserDAOImpl.usernameExists(UserDAOImpl.java:52) 
bg.tu_sofia.cinema.filters.UserReconcilerFilter.doFilter(UserReconcilerFilter.java:54) 
note The full stack trace of the root cause is available in the SAP logs. 

userDOAImpl

package bg.tu_sofia.cinema.dao; 

import java.util.List; 

import javax.persistence.EntityManager; 

import bg.tu_sofia.cinema.entities.Cinema; 
import bg.tu_sofia.utils.EntityManagerUtils; 

public class CinemaDAOImpl implements CinemaDAO { 

    private EntityManager em; 
    private EntityManagerUtils dbUtils; 

    public CinemaDAOImpl() { 
     this.dbUtils = EntityManagerUtils.getInstance(); 
     this.em = dbUtils.getEntityManagerInstance(); 
    } 

    public List<Cinema> getAllCinemas() { 
     return em.createNamedQuery("AllCinemas", Cinema.class).getResultList(); 
    } 

    public Cinema getCinemaByID(long id) { 
     return em.find(Cinema.class, id); 
    } 

    public void addCinema(Cinema cinema) { 
     dbUtils.startTransaction(em); 
     em.persist(cinema); 
     dbUtils.commitTransaction(em); 
    } 

    public void removeCinema(Cinema cinema) { 
     //TODO : don't forget when removing a cinema to remove all its related screenings. 
     dbUtils.startTransaction(em); 
     em.remove(cinema); 
     dbUtils.commitTransaction(em); 
    } 

    public void removeCinemaByID(long removalID) { 
     removeCinema(getCinemaByID(removalID)); 
    } 

} 
+0

我们可以看到源自它的类的代码吗? –

+0

bg.tu_sofia.cinema.dao.UserDAOImpl.getAllUsers(UserDAOImpl.java:22) bg.tu_sofia.cinema.dao.UserDAOImpl.usernameExists(UserDAOImpl.java:52) bg.tu_sofia.cinema.filters.UserReconcilerFilter.doFilter (UserReconcilerFilter.java:54) 注意根源的完整堆栈跟踪在SAP日志中可用。 – user2535339

+0

我有同样的问题。它工作正常,然后我从maven存储库文件夹中删除所有的东西,并做了“maven更新”来解决一个问题。问题已解决,但EntityManager突然没有createNamedQuery(字符串,类)方法... – Lucas

回答

0

它看起来像你调用它不接受参数的方法。如果您向我们展示源代码,我们会更有帮助。

+0

thanks.i编辑了问题 – user2535339

+0

我们可以看到UserDAOImpl吗?它看起来像涉及。 –

2

在使用中实现似乎是JPA 1日实施。如documented与此签名方法

TypedQuery createNamedQuery(字符串名称,类resultClass)

在JPA 2.0中引入的。可能的解决方案是:

  1. 升级到JPA 2.0实现或使用createNamedQuery(java.lang.String name)代替铸造结果