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
相关产品推荐
相关产品推荐

