【问题标题】:java createNamedQuery - entity manager and persistencejava createNamedQuery - 实体管理器和持久性
【发布时间】:2013-06-29 21:06:42
【问题描述】:

我在 java 中收到此错误消息。

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

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));
    }

}

【问题讨论】:

  • 我们能看到这个类的代码吗?
  • 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 SAP 日志中提供了根本原因的完整堆栈跟踪。
  • 我也有同样的问题。它工作正常,然后我从 maven 存储库文件夹中删除了所有东西并执行“maven update”来解决一个问题。问题已解决,但 EntityManager 突然没有 createNamedQuery(String, Class) 方法...

标签: java jakarta-ee jpa-2.0 entitymanager


【解决方案1】:

使用中的实现似乎是 JPA 1 的实现。 As documented 带有此签名的方法

TypedQuery createNamedQuery(String name, Class resultClass)

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

  1. 升级到 JPA 2.0 实施或
  2. 改用createNamedQuery(java.lang.String name) 并转换结果。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我们也能看到 UserDAOImpl 吗?好像有牵扯。
    【解决方案3】:

    NamedQuery“AllCinemas”在哪里?

    一个链接: http://web.securityinnovation.com/appsec-weekly/blog/bid/69739/Use-Named-Queries-with-Java-Persistence-API-JPA

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2016-08-14
      • 2013-02-09
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多