后端(13)-JPA Entity类get和set方法是否要写

99 阅读1分钟

一、答案:

必须写。

在 Java 开发中,Entity 类中的 getset 方法不是“必须”,但在大多数框架中是“强烈推荐”或“间接必须”的,尤其是在使用

二、原因:

1、如果你使用的是:

  • JPA/Hibernate(如 Spring Data JPA)
  • MapStruct
  • BeanUtils.copyProperties
  • Jackson(JSON 序列化/反序列化)
  • Thymeleaf / JSP / 表达式语言 (EL)

这些框架和工具都会默认调用你的 getXxx()setXxx() 方法。

2、如果你不写 get/set,会遇到的问题:

  1. JPA 查询时无法填充字段(因为它默认是通过 setter 方法来设置字段值的,虽然也支持 field access,但默认是 property access);
  2. MapStruct / BeanUtils 无法复制数据
  3. Thymeleaf 页面中 user.name 无法读取(因为它调用的是 getName()
  4. 接口返回数据为空(比如用 @RestController 返回对象时,Jackson 无法反序列化/序列化)

三、最佳方案

如果你觉得写 get/set 很烦,可以用 Lombok,让它自动生成,只需要引入lombok的依赖即可:

@Data // 自动生成 getter, setter, toString, equals, hashCode 等
@Entity
public class EnglishWord {
    @Id
    private Long id;

    private String word;
    private String phonetic;
    private String audioUrl;
    // 省略 getter/setter,因为 @Data 会自动生成
}