我们有一些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/