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中。