hibernate Query list()的緩存問題

直接上代碼

String hql="from MemberCardEntity where memberId='"+mid+"' and (CURDATE()<= deadline OR deadline is NULL)";
List<MemberCardEntity> cards=new ArrayList<MemberCardEntity>();
List<MemberCardEntity> memberCards = systemService.findByQueryString(hql);
for (MemberCardEntity memberCardEntity : memberCards) {
String memberCardType=memberCardEntity.getType();
if("5".equals(memberCardType)){//類型爲時限卡
cards.add(memberCardEntity);
}else{
int count=0;
List<MemberItemEntity> items=memberCardEntity.getMemberItems();
if (items!=null&&!items.isEmpty()) {//卡項目不爲空
List<MemberItemEntity> itemsTemp=new ArrayList<MemberItemEntity>();//無用的item
for (MemberItemEntity memberItemEntity : items) {
if (memberItemEntity.getNumber()==0) {//項目數量爲0
itemsTemp.add(memberItemEntity);
}else{
count=1;//數量不爲0
}
}
items.removeAll(itemsTemp);//去掉數量等於0的項目
}
//items全是0次數,就找groups
List<MemberItemGroupEntity> groups=memberCardEntity.getMemberItemGroups();
if (groups!=null&&!groups.isEmpty()) {//分組項目不爲空
List<MemberItemGroupEntity> groupsTemp=new ArrayList<MemberItemGroupEntity>();
for (MemberItemGroupEntity memberItemGroupEntity : groups) {
if (memberItemGroupEntity.getNumber()==0) {
groupsTemp.add(memberItemGroupEntity);
}else{
count=1;//數量不爲0
}
}
groups.removeAll(groupsTemp);//去掉數量等於0的分組項目
}
if(count==1){
cards.add(memberCardEntity);
}
}
}


for (MemberCardEntity memberCardEntity : memberCards ) {
String memberCardType=memberCardEntity.getType();
if("5".equals(memberCardType)){//類型爲時限卡
memberCardEntity.setType("時限卡");
}
if("1".equals(memberCardType)){
memberCardEntity.setType("套餐卡");
}
if("2".equals(memberCardType)){
memberCardEntity.setType("療程卡");
}
if("3".equals(memberCardType)){
memberCardEntity.setType("自選卡");
}
if("4".equals(memberCardType)){
memberCardEntity.setType("贈送卡");
}
}

//過期的會員卡
String hqlOutDate="from MemberCardEntity where memberId='"+mid+"' and CURDATE()> deadline";
List<MemberCardEntity> cardsOutDate=new ArrayList<MemberCardEntity>();
List<MemberCardEntity> memberCardsOutDate = systemService.findByQueryString(hqlOutDate);
for (MemberCardEntity memberCardEntity : memberCardsOutDate) {
cardsOutDate.add(memberCardEntity);
}
changeMemberCardType(memberCards);
changeMemberCardType(memberCardsOutDate);
request.setAttribute("memberCards", cards);


問題在systemService.findByQueryString(hqlOutDate);

public <T> List<T> findByQueryString(String hql) {
return commonDao.findByQueryString(hql);
}

/**
* 通過hql 查詢語句查找對象

* @param <T>
* @param query
* @return
*/
public List<T> findByQueryString(final String query) {
Query queryObject = getSession().createQuery(query);
List<T> list = queryObject.list();//這裏有緩存的,如果上一次查詢的list改變後,第二次查詢會先把上一次改變後的結果先更新到數據庫,再查詢。
if (list.size() > 0) {
getSession().flush();
}
return list;
}

由於第一次查詢得到的list,然後我們修改了對象的值,第二次查詢時,會先更新list到數據庫,再執行查詢操作

發佈了56 篇原創文章 · 獲贊 5 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章