是否有必要从getter方法返回一个与Hibernate传递给setter的对象不同的对象?

时间:2013-12-02 05:43:32

标签: java performance hibernate jpa

我最近发表了关于使用Hibernate的Java持久性一书的以下声明。我能够理解除突出显示之外的所有其他内容。

要考虑的另一个问题是脏检查。 Hibernate自动检测 对象状态更改,以便将更新后的状态与数据库同步。 从getter方法返回一个不同的对象通常是安全的 Hibernate传递给setter的对象。 Hibernate比较对象 值 - 不是通过对象标识 - 来确定属性是否持久化 国家需要更新。例如,以下getter方法没有 导致不必要的SQL UPDATE:

public String getFirstname() {
return new String(firstname);
}

查询:我的关注点是,我们正在创建实例。这真的有必要吗?如果我在这里错了,请好好纠正我。

1 个答案:

答案 0 :(得分:2)

如果你将从getter返回不同的对象,这意味着你正在尝试创建一个防御性副本。 从hibernate的角度来看,如果从getter返回不同的对象,那么该对象将没有hibernate会话的历史记录,如果你将在该对象上调用save并且该对象已经存在于数据库中,那么你将需要ConstraintViolationException,你必须调用{ {1}}而是。调用saveOrUpdate将导致hibernate在提交之前向数据库发出select语句。

如果某个对象已经在会话中,并且在执行某些更改后调用了commit,Hibernate将发出更新查询