【发布时间】:2016-06-30 03:25:06
【问题描述】:
我有两个关联的实体:
@Entity
@DynamicUpdate(true)
public class DreamTaskInfo {
private DreamInfo dreamInfo;
@ManyToOne
@JoinColumn(name = "DREAM_INFO_ID", nullable = false)
public DreamInfo getDreamInfo() {
return dreamInfo;
}
...
}
@Entity
@DynamicUpdate(true)
public class DreamInfo {
private Set<DreamTaskInfo> dreamTasks = new LinkedHashSet<>();
@OneToMany(mappedBy = "dreamInfo",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OrderBy("remindTime")
public Set<DreamTaskInfo> getDreamTasks() {
return dreamTasks;
}
...
}
我想将数据库中的 DreamTaskInfo 数据用于只读用途,所以我这样做:
DreamTaskInfo task = this.get(id);//query from db
getSession().evict(task);//getSession().contains(task)==false
但我发现 Hibernate 在刷新时总是在此任务上执行更新 sql。 最后,我使用 getSession().clear() 而不是 evict 并且它有效。 也许急切地获取或关联会导致会话中的某些内容? 其实我并没有手动修改任何东西并自动休眠更新,所以它与这个question无关。
【问题讨论】:
-
您能否发布更新查询及其参数。值得调试看看为什么会生成更新。
-
@Vlad Mihalcea ,实际上它使用来自数据库的值查询更新记录的每个字段。