一尘不染

Hibernate是否总是需要一个setter?

hibernate

我们有一些Hibernate getter方法,它们都用@Column和标注@Basic

如果没有相应的设置器,则会出现异常。为什么是这样?

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


阅读 266

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

2020-06-20