NullPointerException в функции Mybatis queryFromDatabase - PullRequest
0 голосов
/ 01 мая 2020

Я получаю NPE в классе MyBatis BaseExecutor. Я предполагаю, что это что-то, что я делаю неправильно, но я не знаю, что это будет. Я использую mybatis 3.5.2

Фрагмент кода для BaseExecutor для удобства: трассировка стека:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in com/mycompany/salesconnect/screport/mapper/hubportfolio/datatable/OwnerDashboard.xml
### The error may involve com.mycompany.salesconnect.screport.mapper.hubportfolio.datatable.OwnerDashboard.getTotalHubPagesDataTableRowCount
### The error occurred while executing a query
### Cause: java.lang.NullPointerException
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76) ~[mybatis-3.5.2.jar:3.5.2]
    at com.mycompany.salesconnect.screport.dao.SCHubOwnerDashboardServiceDaoImpl.getOwnerTotalHubPagesDataTableRowCount(SCHubOwnerDashboardServiceDaoImpl.java:76) ~[classes/:?]
    at com.mycompany.salesconnect.screport.dao.SCHubOwnerDashboardServiceHandler$OwnerTotalHubPagesDataTableService.getDataTableRecordCount(SCHubOwnerDashboardServiceHandler.java:212) ~[classes/:?]
    at com.mycompany.salesconnect.util.DataTableSpreadsheetBuilderRunnable.run(DataTableSpreadsheetBuilderRunnable.java:366) [classes/:?]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
Caused by: java.lang.NullPointerException
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:103) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.2.jar:3.5.2]
    ... 6 more

Фрагмент BaseExecutor для удобства

 private <E> List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
    List<E> list;
    localCache.putObject(key, EXECUTION_PLACEHOLDER);
    try {
      list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql);
    } finally {
      localCache.removeObject(key);  // This is line 326
    }
    localCache.putObject(key, list);
    if (ms.getStatementType() == StatementType.CALLABLE) {
      localOutputParameterCache.putObject(key, parameter);
    }
    return list;
  }

Я попытался повернуть отключение кэширования для быстрого теста, но это не имеет значения.

Это файл сопоставления:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mycompany.myproduct.screport.mapper.hubportfolio.datatable.OwnerDashboard">
    <cache/>

    <resultMap id="OwnerTotalHubPagesDataTableRow"
               autoMapping="false"
               type="com.mycompany.myproduct.screport.model.OwnerTotalHubPagesDataTableRow">
        <result property="hubId" column="hubId"/>
        <result property="hubName" column="hubName"/>
        <result property="pageId" column="pageId"/>
        <result property="pageTitle" column="pageTitle"/>
        <result property="description" column="description"/>
        <result property="entitlement" column="entitlement"/>
        <result property="customEntitlement" column="customEntitlement"/>
        <result property="bizTags" column="bizTags"/>
        <result property="breadcrumbHierarchy" column="breadcrumbHierarchy"/>
        <result property="createdBy" column="createdBy"/>
        <result property="createdOn" column="createdOn"/>
        <result property="dynamicComponents" column="dynamicComponents"/>
        <result property="keywords" column="keywords"/>
        <result property="lastActivatedBy" column="lastActivatedBy"/>
        <result property="lastActivatedOn" column="lastActivatedOn"/>
        <result property="mvc" column="mvc"/>
        <result property="owner" column="owner"/>
        <result property="pagetype" column="pagetype"/>
        <result property="publishedBy" column="publishedBy"/>
        <result property="publishedOn" column="publishedOn"/>
        <result property="status" column="status"/>
        <result property="tags" column="tags"/>
        <result property="updatedBy" column="updatedBy"/>
        <result property="updatedOn" column="updatedOn"/>
        <result property="url" column="url"/>
    </resultMap>


    <sql id="getTotalHubPagesDataTableUnp">
        select /*+ parallel(SCHCM) parallel(SCHTI) parallel(SCHES) parallel(SCHO) parallel(SCHU) parallel(SCHS) */ 
              hubId as hubId
              ,hubName as hubName
              ,schti.alfresco_trace_id as pageId
              ,schcm.title as pageTitle
              ,sches2.entitlement_set_name as entitlement
              ,breadcrumbHierarchy as breadcrumbHierarchy
              ,createdOn as createdOn
              ,dynamicComponents as dynamicComponents
              ,lastActivatedBy as lastActivatedBy
              ,lastActivatedOn as lastActivatedOn
              ,schu.user_key as owner
              ,pagetype as pagetype
              ,publishedBy as publishedBy
              ,publishedOn as publishedOn
              ,status_name as status
              ,updatedBy as updatedBy
              ,updatedOn as updatedOn
              ,url as url
        from sc_hub_content_master schcm
        inner join sc_hub_trace_ids schti
        on schcm.trace_id_key = schti.trace_id_key
        and schcm.pagetype='Page'
        left join sc_hub_entitlements sches
        on sches.entitlement_id=schcm.entitlement_set_id
        left join sc_hub_owners scho
        on scho.hub_content_key=schcm.hub_content_key
        left join sc_hub_users schu
        on schu.user_key = scho.user_id_key
        left join sc_hub_statuses schs
        on schs.status_id = schcm.status_id
        inner join sc_hub_entitlement_sets sches2 
        on sches2.entitlement_set_id = schcm.entitlement_set_id
    </sql>

    <select id="getTotalHubPagesDataTableRowCount"
            resultType="int" 
            parameterType="com.mycompany.myproduct.screport.model.AuthorizedHubRequest">
        with
        getTotalHubPagesDataTableUnp as (
            <include refid="com.mycompany.myproduct.screport.mapper.hubportfolio.datatable.OwnerDashboard.getTotalHubPagesDataTableUnp"/>
        )
        select /*+parallel(AUTO) */
               count(*)
        from getTotalHubPagesDataTableUnp
    </select>

    <select id="getTotalHubPagesDataTable"
         resultType="com.mycompany.myproduct.screport.model.OwnerTotalHubPagesDataTableRow"
         resultMap="OwnerTotalHubPagesDataTableRow" 
         parameterType="com.mycompany.myproduct.screport.model.AuthorizedHubRequest">
        with
        getTHPDataTableUnp as (
            <include refid="com.mycompany.myproduct.screport.mapper.hubportfolio.datatable.OwnerDashboard.getTotalHubPagesDataTableUnp"/>
        ),
        getTHPDataTableRN as (
            select gthdtup.*,rownum as full_set_rownum
            from getTHPDataTableUnp gthdtup          

        ),
        getTHPDataTableRow0ToEnd as (
            select *
            from getTHPDataTableRN
            <if test="requestIsPaginated">
                FETCH FIRST #{calculatedMaximumNumberOfRows} ROWS ONLY
            </if>
        )
        select *
        from getTHPDataTableRow0ToEnd
        <if test="requestIsPaginated">
            <where>
                full_set_rownum >= #{calculatedMinimumRowNumber}
            </where>
        </if>
    </select>



</mapper>
SCHubOwnerDashboardServiceDaoImpl.getOwnerTotalHubPagesDataTablRowCount(...):


    @Override
    public int getOwnerTotalHubPagesDataTableRowCount( AuthorizedHubRequest authorizedHubRequest) throws SCExceptions {
        System.out.println("@@@ authorizedHubRequest==null : "+ (authorizedHubRequest==null));
        System.out.println("@@@ getSqlSession==null : " + (getSqlSession()==null) );
        int result = getSqlSession().selectOne(
                "com.mycompany.salesconnect.screport.mapper.hubportfolio.datatable.OwnerDashboard.getTotalHubPagesDataTableRowCount",authorizedHubRequest);  // Line 76
        closeSqlSession();
        return result;
    }

    private SqlSession sqlSession;

    @Override
    public void closeSqlSession() {
        if(sqlSession !=null) {
            sqlSession.close();
            sqlSession = null;
        }
    }
...