[EntityType] не найдено для ключевого класса - PullRequest
0 голосов
/ 18 июня 2019

Когда я обновлял EclipseLink с 2.5.2 до 2.7.4, я встречал исключение при использовании Criteria API для выбора данных.В любом случае, если я перехожу на JPQL, то исключение пропало.Однако, поскольку в моей системе довольно много областей, в которых используется Criteria API, я не могу изменить все из них на JPQL.Также у меня не было такой проблемы при использовании EclipseLink 2.5.2.Пожалуйста, помогите!

    12:09:17,383 ERROR [stderr] (default task-47) Caused by: java.lang.IllegalArgumentException: No [EntityType] was found for the key class [hk.judiciary.icms.model.dao.entity.HrnRsltCd] in the Metamodel - please verify that the [Entity] class was referenced in persistence.xml using a specific <class>hk.judiciary.icms.model.dao.entity.HrnRsltCd</class> property or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element.

12:09:17,404 ERROR [stderr] (default task-47)   at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.entityEmbeddableManagedTypeNotFound(MetamodelImpl.java:180)

12:09:17,404 ERROR [stderr] (default task-47)   at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.entity(MetamodelImpl.java:202)

12:09:17,404 ERROR [stderr] (default task-47)   at org.eclipse.persistence.internal.jpa.querydef.CommonAbstractCriteriaImpl.internalFrom(CommonAbstractCriteriaImpl.java:119)

12:09:17,405 ERROR [stderr] (default task-47)   at org.eclipse.persistence.internal.jpa.querydef.AbstractQueryImpl.from(AbstractQueryImpl.java:275)

Здесь прикрепите программу API Critieria:

    CriteriaBuilder builder = getEntityManager().getEntityManagerFactory()
            .getCriteriaBuilder();
    CriteriaQuery<HrnRsltCd> criteria = builder.createQuery(HrnRsltCd.class);
    Root<HrnRsltCd> root = criteria.from(HrnRsltCd.class);
    criteria = criteria.select(root);

    List<Predicate> andPredicates = new ArrayList<Predicate>();

    // Active Flag
    andPredicates.add(builder.equal(root.get(PARAM_ACTIVE_FLAG), "1"));

    if (!CommonUtil.isNullOrEmpty(andPredicates)) {
        criteria.where(andPredicates.toArray(new Predicate[0]));
    }

    TypedQuery<HrnRsltCd> query = getEntityManager().createQuery(criteria);
    return this.getResultList(query);

А здесь прикрепите файл persistence.xml

    <?xml version="1.0" encoding="UTF-8"?>
<persistence
    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"
    version="2.0">


    <persistence-unit name="icmshrnmcPU" transaction-type="JTA">

        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>java:jboss/datasources/appds</jta-data-source>  
        <jar-file>icms-entity-lib-0.2.9.544.jar</jar-file>
        <jar-file>../icmshrnmc-ejb.jar</jar-file>
        <properties>
            <property name="jboss.entity.manager.jndi.name" value="java:jboss/persistence/icmshrnmcPU" />
            <property name="eclipselink.target-database"
                value="org.eclipse.persistence.platform.database.oracle.Oracle11Platform" />
            <property name="eclipselink.target-server" value="JBoss" />
            <property name="eclipselink.composite-unit" value="true" />
            <property name="eclipselink.session.customizer"
                value="hk.judiciary.fmk.ejb.dao.entity.DefaultEntityInterceptor" />
            <property name="eclipselink.deploy-on-startup" value="true"/>
        </properties>  

    </persistence-unit>    

</persistence>

Файл 2 jar (icms-entity-lib-0.2.9.544.jar и icmshrnmc-ejb.jar) в любом случае также имеют свой файл persistence.xml с разными именами единиц хранения.

...