首页 > 解决方案 > EclipseLink JPA 2.1 - 调用 JPA 本机查询并尝试将结果映射到 POJO 时引发异常

问题描述

我正在使用 EclipseLink 2.5.2 并使用以下 orm.xml 将本机查询的结果映射到 POJO。

<named-native-query name="RelSumView.findFmkItem">
    <query>
        select item_file_name
             , last_release_id
             , last_release_version
          from tableA
    </query>
</named-native-query>

<sql-result-set-mapping name="FmkItemDtoMapping">
    <constructor-result target-class="xxx.model.common.biz.dto.FmkItemDTO">
        <column name="item_file_name" class="java.lang.String" />
        <column name="last_release_id" class="java.lang.Integer" />
        <column name="last_release_version" class="java.lang.String" />
    </constructor-result>
</sql-result-set-mapping>

但是在下面的 DAO 类中:

public List<FmkItemDTO> getFmkReleaseItemsByEnvLabelId(int envLabelId) {
    return getEntityManager().createNamedQuery("RelSumView.findFmkItem", "FmkItemDtoMapping").getResultList();
}

抛出以下异常:

Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-6042] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException

异常描述:必须为非对象级查询指定会话名称。请参阅 setSessionName(String) 方法。

Query: ResultSetMappingQuery(sql="RelSumView.findFmkItem")
at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:480)
at xxx.model.common.dao.FmkReleaseDAO.getFmkReleaseItemsByEnvLabelId(FmkReleaseDAO.java:28)

我不知道这个异常是什么以及如何将会话名称设置为查询。

标签: jpaeclipselinkjpa-2.1

解决方案


推荐阅读