You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate中@Entity注解类生成Getters和Setters的作用及调用时机

Hibernate实体类中Getters和Setters的作用与调用场景

一、核心作用

  • 实现属性封装:实体类的成员变量都是私有(private)的,通过Getters和Setters可以实现对属性的可控访问,避免外部直接操作私有字段,完全符合面向对象的封装设计原则。
  • 支撑ORM映射逻辑:Hibernate默认依赖标准的Getter/Setter方法完成数据库与实体类的映射交互——从数据库加载数据时,它会调用Setter把字段值赋给实体属性;保存或更新实体时,又会调用Getter读取属性值生成SQL同步到数据库。
  • 兼容框架生态:像Spring、JPA这类依赖JavaBean规范的框架,都要求实体类具备标准的Getters/Setters,这样才能支持属性注入、表单数据绑定、对象序列化/反序列化等功能。
  • 扩展业务逻辑:你可以在Getters/Setters里加入自定义逻辑,比如在setFirstName里校验输入字符串的长度,或者在获取关联对象的Getter中触发Hibernate的懒加载,甚至添加日志记录。

二、常见调用场景

  • Hibernate内部操作
    • 加载实体:从数据库查询到数据后,Hibernate自动调用Setter方法,把数据库字段值注入到实体对象的对应属性中。
    • 保存/更新实体:准备生成SQL语句时,Hibernate调用Getter方法读取实体属性值,将其同步到数据库表中。
    • 懒加载触发:当你调用关联实体的Getter方法时,Hibernate会触发懒加载机制,从数据库拉取关联的数据。
  • 业务代码直接调用:在业务逻辑里读取或修改实体属性,比如获取学生的firstName做业务判断,或者更新学生的lastName信息,都会直接调用对应的Getter/Setter。
  • 框架集成场景
    • Spring数据绑定:在Spring MVC中,前端表单提交的数据会通过Setter方法自动绑定到实体对象;使用Spring依赖注入时,也可能依赖Getter/Setter完成属性注入。
    • 序列化/反序列化:把实体对象转为JSON(比如用Jackson)时,框架会调用Getter读取属性值;反过来把JSON转成实体对象时,会调用Setter赋值。
  • 工具类操作:比如用Apache BeanUtils进行对象属性拷贝时,就是通过Getter读取源对象属性,再通过Setter赋值给目标对象。

示例代码

@Entity
@Table(name="student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;
    private String firstName;
    private String lastName;
    
    public Student() {
    }

    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }
    
    public void setFirstName(String firstName) {
        // 可添加自定义逻辑,比如参数校验
        if (firstName != null && firstName.length() > 20) {
            throw new IllegalArgumentException("姓名长度不能超过20");
        }
        this.firstName = firstName;
    }
    
    // 其他属性的getters和setters
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getLastName() {
        return lastName;
    }
    
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

内容的提问来源于stack exchange,提问作者Alok Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:55