Spring生态新手疑问:JPA @Entity类是否需私有属性与getter/setter?
@Entity类是否必须包含getter/setter、属性必须私有?
属性是否必须设为私有?
不是必须,但非常推荐设为私有。JPA规范(包括Hibernate实现)支持字段使用private、protected、包私有(无修饰符)甚至public的访问权限——Hibernate可以通过反射直接操作字段,不受访问修饰符限制。但私有属性能保证封装性,符合面向对象设计原则,避免外部代码直接修改实体状态,这在团队开发里是基本规范。
getter和setter是否必须存在?
也不是必须,分两种访问策略来看:
- 字段访问策略(默认):如果你的
@Id注解标注在字段上,Hibernate会直接通过反射读写字段,完全不需要对应的getter/setter。比如:@Entity public class User { @Id private Long id; private String username; // 没有getter/setter也能正常映射 } - 属性访问策略:如果
@Id注解标注在getter方法上,Hibernate会通过getter/setter来访问属性,这时候必须有对应的getter方法;setter方法则看属性是否需要被更新——只读属性可以不用写setter,但如果是需要持久化更新的字段,建议加上。
不过实际开发中,哪怕Hibernate不需要,也建议给实体类加上getter/setter:一方面业务代码里肯定需要读取或修改实体属性,另一方面像Spring Data、Jackson序列化(比如返回JSON接口)这类工具,很多时候依赖这些方法来正常工作。
总结
- 属性不强制私有,但推荐私有;
- getter/setter不强制存在,取决于你用的访问策略,但实际开发中建议加上;
- JPA/Hibernate不依赖getter/setter来操作字段(字段访问模式下),但业务和其他工具可能需要。
内容的提问来源于stack exchange,提问作者user19297279
相关产品推荐
相关产品推荐

