直接上代码
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到数据库,再执行查询操作