這是在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。
添加回答
舉報
0/150
提交
取消