JPA @AttributeOverrides 注解:覆盖嵌入类属性映射
以下代码使用 JPA 的 @AttributeOverrides 注解来覆盖嵌入类(Embeddable)中的属性映射。
@Embedded
@AttributeOverrides({
@AttributeOverride(name="p_housld", column=@Column(name = "s_housld")),
@AttributeOverride(name="p_pop", column=@Column(name = "s_pop")),
@AttributeOverride(name="p1", column=@Column(name = "s1")),
@AttributeOverride(name="p2", column=@Column(name = "s2")),
@AttributeOverride(name="p3_1", column=@Column(name = "s3_1")),
@AttributeOverride(name="p3_2", column=@Column(name = "s3_2")),
@AttributeOverride(name="p3_3", column=@Column(name = "s3_3")),
@AttributeOverride(name="p4_1", column=@Column(name = "s4_1")),
@AttributeOverride(name="p4_2", column=@Column(name = "s4_2")),
@AttributeOverride(name="p4_3", column=@Column(name = "s4_3")),
@AttributeOverride(name="p5_1", column=@Column(name = "s5_1")),
@AttributeOverride(name="p5_2", column=@Column(name = "s5_2")),
@AttributeOverride(name="p5_3", column=@Column(name = "s5_3")),
@AttributeOverride(name="p6_1", column=@Column(name = "s6_1")),
@AttributeOverride(name="p6_2", column=@Column(name = "s6_2")),
@AttributeOverride(name="p6_3", column=@Column(name = "s6_3")),
@AttributeOverride(name="p7_1", column=@Column(name = "s7_1")),
@AttributeOverride(name="p7_2", column=@Column(name = "s7_2")),
@AttributeOverride(name="p7_3", column=@Column(name = "s7_3")),
@AttributeOverride(name="p8_1", column=@Column(name = "s8_1")),
@AttributeOverride(name="p8_2", column=@Column(name = "s8_2")),
@AttributeOverride(name="p8_3", column=@Column(name = "s8_3")),
@AttributeOverride(name="p9_1", column=@Column(name = "s9_1")),
@AttributeOverride(name="p9_2", column=@Column(name = "s9_2")),
@AttributeOverride(name="p9_3", column=@Column(name = "s9_3")),
@AttributeOverride(name="p9_4", column=@Column(name = "s9_4")),
@AttributeOverride(name="p11", column=@Column(name = "s11")),
})
private NatNrmovReportAttributes source=new NatNrmovReportAttributes();
@Embedded 注解表示这个属性是一个嵌入类,它将被映射到数据库表中的多个列。
@AttributeOverrides 注解用于覆盖嵌入类中每个属性的映射信息。通过指定 name 属性来指定要覆盖的属性名,通过 column 属性来指定要覆盖的列名。
在以上代码中,嵌入类 NatNrmovReportAttributes 中的每个属性都被覆盖了,通过指定新的列名来映射到数据库表中。
这样做的目的是为了在实体类中使用更具有语义化的属性名,而在数据库表中使用更简短的列名。这样可以提高代码的可读性,并且在修改数据库表结构时不需要修改实体类的属性名。
具体来说,嵌入类 NatNrmovReportAttributes 中的属性被覆盖为以下列名:
p_housld被覆盖为s_housldp_pop被覆盖为s_popp1被覆盖为s1p2被覆盖为s2p3_1被覆盖为s3_1p3_2被覆盖为s3_2p3_3被覆盖为s3_3p4_1被覆盖为s4_1p4_2被覆盖为s4_2p4_3被覆盖为s4_3p5_1被覆盖为s5_1p5_2被覆盖为s5_2p5_3被覆盖为s5_3p6_1被覆盖为s6_1p6_2被覆盖为s6_2p6_3被覆盖为s6_3p7_1被覆盖为s7_1p7_2被覆盖为s7_2p7_3被覆盖为s7_3p8_1被覆盖为s8_1p8_2被覆盖为s8_2p8_3被覆盖为s8_3p9_1被覆盖为s9_1p9_2被覆盖为s9_2p9_3被覆盖为s9_3p9_4被覆盖为s9_4p11被覆盖为s11
这样,当使用这个嵌入类的属性时,对应的列名将会是被覆盖后的新列名。
原文地址: https://www.cveoy.top/t/topic/ckfk 著作权归作者所有。请勿转载和采集!