我们有一些使用 @Column
和 @Basic
注释的 Hibernate getter 方法。
如果我们没有相应的 setter ,我们会得到一个异常。为什么是这样?
在我们的例子中,我们派生从 getter 返回的值(以存储在 DB 中),而 setter 没有任何功能用途。所以我们只有一个空方法来绕过错误情况..
最佳答案
正如其他人所提到的,如果您对属性 getter 方法进行注释,那么 Hibernate 在从数据库中读取值时会使用该 setter。基本上,Hibernate 假定它写入数据库的任何内容最终都需要从数据库中读取。这意味着如果你注释了一个 getter,那么它在从数据库中读取对象时需要调用一个 setter。
您可以将 setter 设为私有(private)(Hibernate 将使用反射来访问 setter)。这是在保持类契约的同时仍然使用 Hibernate 进行关系映射的好方法。
如果该字段是从类中的其他属性派生的,那么为什么要将它存储在数据库中?您可以使用 @Transient
注释以标记不应将其存储在数据库中的字段。您甚至可以使用 @Formula
注释让 Hibernate 为您派生字段(它通过使用发送到数据库的查询中的公式来完成此操作)。
关于java - 当有 getter 时,Hibernate 是否总是需要一个 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676689/