我们有一些Hibernate getter方法,都用@Column@Basic注释。

如果没有相应的setter,则会得到一个异常(exception)。为什么是这样?

在我们的例子中,我们派生了从getter返回的值(将其存储在数据库中),而setter没有任何功能目的。因此,我们只有一个空方法可以解决错误情况。

最佳答案

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

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

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

关于java - 有 setter/getter 时,Hibernate是否总是需要一个setter?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2676689/

10-11 22:25
查看更多