hibernate Query list()的快取問題二
List<MemberCard> list = systemService.findListBySql();//查詢結果集
for(MemberCard m : list){
Member member = systemService.getEntity(Member.class, memberCard.getMemberId());//查詢得到每個會員物件
m.setName(member .getName());//將會員卡的名字設定為會員的名字
}
for迴圈遍歷時候,當第二次執行 systemService.getEntity()查詢每個會員物件,hibernate先查詢快取,發現第一次查詢的結果值被set過了,那麼先儲存第一次改變了的物件到資料庫中,我這裡僅需要把m的名字改變,並response給前臺,並不希望儲存到資料庫,於是就矛盾了。後來想到先將name和id儲存到Map中,迴圈完畢之後,再改變m的值,如下
List<MemberCard> list = systemService.findListBySql();//查詢結果集
Map<String,String> map = new HashMap<String,String>();
for(MemberCard m : list){
Member member = systemService.getEntity(Member.class, memberCard.getMemberId());//查詢得到每個會員物件
map.put(memberCard.mamberId(),member.getName());
}
for(MemberCard m : list){
m.setName(map.get(m.getMemberId());//將會員卡的名字設定為會員的名字
}
這樣hibernate就不會將m的改變值持久化到DB中。