【发布时间】:2016-01-22 13:57:32
【问题描述】:
我已经在这个问题上苦苦挣扎了几个小时,并且可以得到一些帮助。
- 客户端发送一个包含列表的对象;
- 列表中的一个对象已在客户端上进行了修改;
- 在某些情况下,我不希望将修改后的实体持久化到数据库中,我希望保留原始数据库值。
我已经尝试了以下各种尝试来清除()、刷新()和刷新()会话:
List<Integer> notToModifyIds = dao.getDoNotModifyIds(parentEntity.getId());
MyEntityFromList entityFromClient, entityFromDb;
for(Integer notToModifyId : notToModifyIds){
ListIterator iterator = parentEntity.getEntities().listIterator();
while(iterator.hasNext()){
entityFromClient = (MyEntity) iterator.next();
if(Objects.equals(entityFromClient.getId(), notToModifyId)){
dao.evict(entityFromClient);
entityFromDb = (MyEntity) dao.get(MyEntity.class, notToModifyId);
iterator.remove(entityFromClient);
iterator.add(entityFromDb);
}
}
}
但是,无论我尝试什么,我总是将来自客户端的值保存到数据库中。当我在iterator.add() 之后添加断点时,我可以检查数据库值在该点是否没有更新,因此我知道如果我可以从数据库加载实体,那么我将拥有我想要的值。
我有点吃不消了!
【问题讨论】:
-
也许是!这里缺少:if(!Objects.equals(entityFromClient.getId(), notToModifyId))
-
你能简单地避免修改你不想被持久化的实体吗?
-
@Linuslabo 不,除了被驱逐之外,代码运行正常。
-
@DraganBozanovic 在这种情况下,用户可以修改客户端上的实体,但不应将更改保存到数据库中。
-
那就不要合并修改过的不应该被持久化的实体。