Ошибка «<MyClass> не может быть выбрана в качестве корня критериев, поскольку она не является сущностью» - PullRequest
0 голосов
/ 13 мая 2019

У меня следующая ошибка:

"класс не может быть выбран в качестве корня запроса критериев, поскольку он не является сущностью."

Я аннотировал класс с помощью @Entity,@Table и зарегистрировал сущность в файле persistence.xml.

Я получаю сообщение об ошибке при создании объекта Root из моего класса Entity:

Root<ConfigurazioniEntity> root = cq.from(ConfigurazioniEntity.class);

Класс объекта:

package it.convalida.nazionale.core.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = ConfigurazioniEntity.TABLE_NAME)
public class ConfigurazioniEntity implements BaseEntity {

    private static final long serialVersionUID = 6651666466423423207L;

    public static final String TABLE_NAME = "PRA_CONFIG_DL98";

    @Id
    @Column(name = "ID_PRA_CONFIG", nullable = false, updatable = false)
    private Long idPraConfig;

    @Column(name = "NOME_PARAM")
    private String nomeParam;

    @Column(name = "VALORE_PARAM")
    private String valoreParam;

    /**
     * 1 = ATTIVO, 0 = NON ATTIVO
     */
    @Column(name = "ATTIVO")
    private String attivo;

    public Long getIdPraConfig() {
        return idPraConfig;
    }

    public void setIdPraConfig(Long idPraConfig) {
        this.idPraConfig = idPraConfig;
    }

    public String getNomeParam() {
        return nomeParam;
    }

    public void setNomeParam(String nomeParam) {
        this.nomeParam = nomeParam;
    }

    public String getValoreParam() {
        return valoreParam;
    }

    public void setValoreParam(String valoreParam) {
        this.valoreParam = valoreParam;
    }

    public String getAttivo() {
        return attivo;
    }

    public void setAttivo(String attivo) {
        this.attivo = attivo;
    }

}

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="convalidaNazionalePersistentUnit" transaction-type="JTA">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>jdbc/convalidaNazionale</jta-data-source>
        <class>it.convalida.nazionale.core.entity.AssociaPratica</class>
        <class>it.convalida.nazionale.core.entity.Fascicolo</class>
        <class>it.convalida.nazionale.core.entity.Note</class>
        <class>it.convalida.nazionale.core.entity.LogAssociaPratica</class>
        <class>it.convalida.nazionale.core.entity.ConfigurazioniEntity</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <shared-cache-mode>NONE</shared-cache-mode>
        <validation-mode>NONE</validation-mode>
        <properties>
            <property name="javax.persistence.sharedCache.mode" value="NONE" />
            <property name="openjpa.DataCache" value="false" />
            <property name="openjpa.QueryCache" value="false" />
            <property name="openjpa.Log" value="DefaultLevel=INFO,Tool=INFO" />
            <property name="openjpa.jdbc.DBDictionary" value="DisableAlterSeqenceIncrementBy=true" />
            <property name="openjpa.jdbc.MappingDefaults"
                value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict" />
        </properties>
    </persistence-unit>
</persistence>

Дао:


package it.convalida.nazionale.core.dao.impl;

import java.util.List;

import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import it.convalida.nazionale.core.dao.ConfigurazioniDao;
import it.convalida.nazionale.core.eccezioni.ConvalidaNazionaleCoreException;
import it.convalida.nazionale.core.entity.ConfigurazioniEntity;

public class ConfigurazioniDaoImpl extends GenericDaoImpl<ConfigurazioniEntity> implements ConfigurazioniDao {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurazioniDaoImpl.class);

    public ConfigurazioniDaoImpl() {
        super(ConfigurazioniEntity.class);
    }

    /**
     * @param startFrom
     * @param pageSize
     * @return
     * @throws ConvalidaNazionaleCoreException
     */
    public List<ConfigurazioniEntity> findConfigurazioni(int startFrom, int pageSize)
            throws ConvalidaNazionaleCoreException {
        try {
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery<ConfigurazioniEntity> cq = cb.createQuery(ConfigurazioniEntity.class);
            Root<ConfigurazioniEntity> root = cq.from(ConfigurazioniEntity.class);
            cq.select(root);
            TypedQuery<ConfigurazioniEntity> query = em.createQuery(cq).setFirstResult(startFrom).setMaxResults(pageSize);
            return getResultList(query);
        } catch (Exception e) {
            LOGGER.error("Errore nel findConfigurazioni", e);
            throw new ConvalidaNazionaleCoreException(e); 
        }
    }

}

Все остальные объекты выполняются аналогичным образом и признаются как объекты, но не мои.У меня ошибка только на моей сущности.

1 Ответ

0 голосов
/ 14 мая 2019

По какой-то причине он не распознал сущность.

После запуска «Чистая установка Maven» все работало правильно

...