java createNamedQuery - 实体管理器和持久性

0 java entitymanager jpa-2.0 jakarta-ee

我在 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.
Run Code Online (Sandbox Code Playgroud)

用户DOAImpl

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

}
Run Code Online (Sandbox Code Playgroud)

Mik*_*unu 5

使用中的实现似乎是 JPA 1 实现。作为记录方法与此签名

TypedQuery createNamedQuery(String name, Class resultClass)

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

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