我最近在Java persistence with Hibernate一书中看到了以下陈述。除了突出显示的部分之外,我能够理解其他所有内容。
另一个需要考虑的问题是脏检查。 Hibernate自动检测 对象状态更改以便将更新后的状态与数据库同步。 从 getter 方法返回与 getter 方法不同的对象通常是安全的 Hibernate 传递给 setter 的对象。 Hibernate 通过以下方式比较对象: 值(而不是对象标识)来确定属性是否持久 状态需要更新。例如,下面的 getter 方法不 导致不必要的 SQL 更新:
public String getFirstname() {
return new String(firstname);
}
查询:我关心的是我们正在创建新实例。这真的有必要吗?如果我错了,请纠正我..
最佳答案
如果您从 getter 返回不同的对象,则意味着您正在尝试创建防御性副本。
从hibernate的角度来看,如果您从getter返回不同的对象,则该对象将没有hibernate session 的历史记录,并且如果您将在该对象上调用save并且该对象已存在于数据库中,您将得到ConstraintViolationException
,您有改为调用 saveOrUpdate
。调用 saveOrUpdate
将导致 hibernate 在提交之前向数据库发出 select 语句。
如果某个对象已经在 session 中,并且您在执行一些更改后调用提交,Hibernate 将发出更新查询
关于java - 是否有必要从 getter 方法返回一个与 Hibernate 传递给 setter 的对象不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20321617/