亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

hibernate 執行hql語句出現錯誤

hibernate 執行hql語句出現錯誤

梵蒂岡之花 2019-01-16 14:24:46
這是在Dao層獲取List<PortfolioMemberView>, 我在該 public List<PortfolioMemberView> getPortfolioMemberViewByPid(Integer pid){ //查看portfolioId 的值 System.out.print(pid); try { Session session = sessionFactory.getCurrentSession(); String sql = "from PortfolioMemberView pv where pv.portfolioId = ?0"; Query query = session.createQuery(sql).setParameter(0, pid); List<PortfolioMemberView> pmvl = query.list(); //我用這個print方法來在console里面查看輸出結果。 for(PortfolioMemberView pv: pmvl){ System.out.print(pv.getAssetCode()); } return pmvl; }catch(Exception e){ logger.info("操作失敗:" + e.getMessage() + ", " +e.getCause()); throw new RuntimeException(); } } 此時 我在數據庫的 PortfolioMemberView視圖 里有以下數據, portfolioId assetId accountType assetCode assetLabel value_ annualReturn returnRate 10 1 S wOOWoo1S Canadian National 8699.75 1379.1885 0.15853196930946292 15 1 S wOOWoo1S Canadian National 782 123.97200000000001 0.15853196930946292 13 1 S wOOWoo1S Canadian National 0 0 11 1 S wOOWoo1S Canadian National 879.75 139.4685 0.15853196930946292 5 2 P CMPROP0121 Commercial Property 1.04 56960.05564 54769.28426923077 2 2 P CMPROP0121 Commercial Property 101.92 5582085.45272 54769.284269230775 2 4 P kckb karawokie 630 484097.4 768.4085714285715 2 5 S GYck ClickGym 4806 375580 78.14814814814815 10 5 S GYck ClickGym 4860 379800 78.14814814814815 13 5 S GYck ClickGym 486 37980 78.14814814814815 14 5 S GYck ClickGym 4860 379800 78.14814814814815 2 8 S min7b sd 7182 68731.74 9.57 2 9 D heyBo saveBow 9 171.76983230868902 19.085536923187668 觸發該方法時 console給我的輸出結果是這樣的, 2 Hibernate: select portfoliom0_.portfolioId as portfoli1_8_, portfoliom0_.assetId as assetId2_8_, portfoliom0_.accountType as accountT3_8_, portfoliom0_.assetCode as assetCod4_8_, portfoliom0_.assetLabel as assetLab5_8_, portfoliom0_.value_ as value_6_8_, portfoliom0_.annualReturn as annualRe7_8_, portfoliom0_.returnRate as returnRa8_8_ from PortfolioMemberView portfoliom0_ where portfoliom0_.portfolioId=? CMPROP0121CMPROP0121CMPROP0121CMPROP0121CMPROP0121 我不是很明白,portfolioId為2時, 對應的三條記錄的asseCode屬性應該時CMPROP0121,kckb,GYck,但是結果缺連續輸出了三個CMPROP0121。這個bug看不出是哪里造成,Hibernate自己在console里面打印生成出來的sql語句我去數據庫那里跑了一下,輸出結果正確。但是通過這個方法得出的list結果卻不正確。請大神幫一下忙。
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

你是不是把 portfolioId map 成 id 了。這是 hibernate 的緩存機制,它取第一個 row 會根據 id 緩存它,取第二個 row 時如果 id 一樣 hibernate 會認為他們是一樣的,會直接從緩存中取出輸出。

如果portfolioId有重復的,不要 map 成 id。

查看完整回答
反對 回復 2019-02-12
  • 1 回答
  • 0 關注
  • 446 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號