java - 当有 getter 时,Hibernate 是否总是需要一个 setter?

标签 java hibernate getter-setter

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

相关文章:

java - 为什么 '<' 显示为 <

java - 在 Spring 批处理中插入跳过的记录信息

hibernate - c3p0 或 Apache DBCP 或 Proxool 在 hibernate 中的性能?

javascript - Object.defineProperty 复制属性值

java - 我的 getter 函数应该放在哪里?

python - 什么时候将事物存储为实例的一部分与返回它们?

java - 在日期和整数之间计算

java - QueryDSL 子查询不起作用

java - 集成 Struts 2 和 hibernate 的最佳方法

java - Spring Boot JPA依赖异常