Hibernate如何将自定义对象属性作为表列生成对应数据表
Hibernate自定义对象属性映射为数据表列实现方案
你需要使用JPA规范提供的@Embeddable+@Embedded注解组合完成映射,该特性会将可嵌入类的所有属性直接平铺到所属实体对应的数据库表中,完全符合你期望的表结构。
修改步骤
1. 改造自定义类CustomObject
给类添加@Embeddable注解,同时去掉private类修饰符(私有类会导致Hibernate无法通过反射访问完成映射),补充无参构造方法:
import jakarta.persistence.Embeddable; // 旧版本Hibernate使用javax.persistence.Embeddable @Embeddable public class CustomObject { String attr1; String attr2; // 必须提供无参构造方法 public CustomObject() {} // 按需添加对应getter、setter }
2. 改造实体类Result
将CustomObject字段上的@Column注解替换为@Embedded,同时给主键id补充@Id注解(Hibernate实体类必须声明主键):
import jakarta.persistence.*; // 旧版本Hibernate使用javax.persistence下的对应注解 @Entity @Table(name = "result") public class Result { @Id @Column private String id; @Embedded public CustomObject cobject; // 补充无参构造、getter、setter }
可选配置:自定义列名
如果需要修改attr1、attr2对应的数据库列名,可以通过@AttributeOverrides注解配置:
@Embedded @AttributeOverrides({ @AttributeOverride(name = "attr1", column = @Column(name = "custom_attr1")), @AttributeOverride(name = "attr2", column = @Column(name = "custom_attr2")) }) public CustomObject cobject;
内容的提问来源于stack exchange,提问作者try.aaam
相关产品推荐
相关产品推荐

