当有一个获取器时,Hibernate是否总是需要一个二传手?

2022-08-31 15:39:48

我们有一些 Hibernate getter 方法,并用 和 进行注释。@Column@Basic

如果我们没有相应的 setter,我们会得到一个异常。这是为什么呢?

在我们的例子中,我们派生从getter返回的值(存储在数据库中),并且setter没有功能目的。因此,我们只有一个空方法来解决错误条件。


答案 1

正如其他人所提到的,如果您注释属性 getter 方法,则 Hibernate 在从数据库中读取值时使用 setter。基本上,Hibernate假设它写入数据库的任何内容最终都需要从数据库中读取。这意味着,如果对 getter 进行注释,则在从数据库中读取对象时,它需要调用 setter。

您可以将 setter 设为私有(Hibernate 将使用反射来访问 setter)。这是在保留类的协定的同时仍使用 Hibernate 进行关系映射的好方法。

如果该字段派生自类中的其他属性,那么为什么要将其存储在数据库中?可以使用@Transient批注将字段标记为不应存储在数据库中。您甚至可以使用@Formula注释让 Hibernate 为您派生字段(它通过使用发送到数据库的查询中的公式来执行此操作)。


答案 2

您应该使用 和 属性对类进行批注和批注。这应该可以解决您的问题。setter 是支持重构的最佳方式。有个小二传手有什么问题。@Entity(access = AccessType.FIELD)


推荐