天天看點

HQL 定制傳回類型map ALIAS_TO_ENTITY_MAP

前提:
ThirdPartyAppPayChannel ,ThirdPartyPayChannel兩個表裡面一個相同的字段

第一種方式:
SELECT
    new map (
        c.isEnabled AS appisEnabled,
        ac.isEnabled AS channelisEnabled
    )
FROM
    ThirdPartyAppPayChannel c,
    ThirdPartyPayChannel ac
WHERE
    ac.mscCode = c.mscCode
AND c.mscCode = 'J00264'

Query query = em.createQuery(hql);
List<Map<String, Object>> = query.getResultList();
傳回的結果集map為{channelisEnabled=false, appisEnabled=true}

第二種方式:
使用JPA的EntityManager,原生sql查詢

SELECT
    c.is_enabled ,c.isEnabled 
FROM
    sdk_third_party_app_pay_channel c,
    sdk_third_party_pay_channel ac
WHERE
    ac.mscCode = c.mscCode
AND c.mscCode = 'J00264'

query = em.createNativeQuery(sql.toString());
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

再結果集map中就隻會出現一個{is_enabled=false},原因是因為查詢結果将字段名作為map的key,然後兩個字段名相同就會出現其中一個的值導緻結果集中隻有一個字段的資訊。

           

繼續閱讀