JPA NamedQuery не найден - PullRequest
       3

JPA NamedQuery не найден

0 голосов
/ 24 апреля 2019

Я пытаюсь получить список людей, использующих JPA. Каждый раз, когда я запускаю код, я получаю «java.lang.IllegalArgumentException: Named. Запрос имени: Persoon.getAllePersonen not found».

Я попытался изменить имя таблицы, заменил Persoon.getAllePersonen на getAllePersonen, .... Я просто не могу понять, что является причиной ошибки

Persoon

@Entity
@Table(name = "Persoon")
@NamedQueries({
    @NamedQuery(name = "Persoon.getAllePersonen",
            query = "SELECT p FROM Persoon p"),
    @NamedQuery(name = "Persoon.findByName",
            query = "SELECT p FROM Persoon p WHERE p.achternaam = :persoonNaam OR p.voornaam = :persoonNaam")
})

public class Persoon implements Serializable {

PersoonDao

    public List<Persoon> getAlleLeden(){
            TypedQuery<Persoon> queryP = em.createNamedQuery("Persoon.getAllePersonen", Persoon.class);
                  try{ return queryP.getResultList();            
        } catch (NoResultException e){
            throw new EntityNotFoundException("Cannot find leden");
        }
    }

EDIT:

Универсальный суперкласс DAO

public class GenericDaoJpa<T>{

    private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("TaijitanPU");

    protected static final EntityManager em = emf.createEntityManager();

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="TaijitanPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>domein.Persoon</class>
    <class>domein.Graad</class>
    <class>domein.Locatie</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost\sqlexpress:1433;databaseName=Taijitan;integratedSecurity=true;"/>
      <property name="javax.persistence.jdbc.user" value=""/>
      <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="javax.persistence.jdbc.password" value=""/>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>

1 Ответ

1 голос
/ 24 апреля 2019

Вы должны создать абстрактный класс Общий класс и переопределить entityManager родительского класса для каждого дочернего элемента.Проверьте ниже.Я использовал EJB Stateless для детей.

-> PARENT DAO

public abstract class AbstractDAO<T> {
...

protected abstract EntityManager getEntityManager();

-> CHILD DAO

@PersistenceContext(unitName = "yourPersistenceUnitName")
private EntityManager em;

@Override
protected EntityManager getEntityManager() {
    return em;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...