gpt4 book ai didi

java - hibernate : can't reload entity from database

转载 作者:行者123 更新时间:2023-12-01 10:33:35 25 4
gpt4 key购买 nike

我已经在这个问题上苦苦挣扎了几个小时,需要一些帮助。

  1. 客户端发送一个包含列表的对象;
  2. 列表中的对象之一已在客户端上修改;
  3. 在某些情况下,我不希望将修改后的实体保留到数据库中,而是希望保留原始数据库值。

我尝试了以下和各种尝试来清除(),刷新()和刷新() session :

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() 之后添加断点时,我可以检查数据库值在该点尚未更新,因此我知道如果我可以从数据库加载实体,那么我会我想要的值(value)。

我感觉有点高兴!

最佳答案

我不知道我是否在这里得到了整个场景。那些修改后的“entitiesFromClient”是否附加到 Hibernate session ?如果是的话,那么在您“驱逐”它们之前,这些更改可能会自动刷新到数据库中。设置手动冲洗模式将帮助您避免自动行为。首先,我将启用 Hibernate SQL 日志记录以更准确地查看正在发生的情况。请参阅Enable Hibernate logging .

如果此代码在事务中运行,则在另一个 session 中检查数据库(在断点处停止时)将无济于事。即使更改已刷新到数据库中,在提交事务之前您也不会看到它。

关于java - hibernate : can't reload entity from database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com