以下代码使用 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_housld
  • p_pop 被覆盖为 s_pop
  • p1 被覆盖为 s1
  • p2 被覆盖为 s2
  • p3_1 被覆盖为 s3_1
  • p3_2 被覆盖为 s3_2
  • p3_3 被覆盖为 s3_3
  • p4_1 被覆盖为 s4_1
  • p4_2 被覆盖为 s4_2
  • p4_3 被覆盖为 s4_3
  • p5_1 被覆盖为 s5_1
  • p5_2 被覆盖为 s5_2
  • p5_3 被覆盖为 s5_3
  • p6_1 被覆盖为 s6_1
  • p6_2 被覆盖为 s6_2
  • p6_3 被覆盖为 s6_3
  • p7_1 被覆盖为 s7_1
  • p7_2 被覆盖为 s7_2
  • p7_3 被覆盖为 s7_3
  • p8_1 被覆盖为 s8_1
  • p8_2 被覆盖为 s8_2
  • p8_3 被覆盖为 s8_3
  • p9_1 被覆盖为 s9_1
  • p9_2 被覆盖为 s9_2
  • p9_3 被覆盖为 s9_3
  • p9_4 被覆盖为 s9_4
  • p11 被覆盖为 s11

这样,当使用这个嵌入类的属性时,对应的列名将会是被覆盖后的新列名。

JPA @AttributeOverrides 注解:覆盖嵌入类属性映射

原文地址: https://www.cveoy.top/t/topic/ckfk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录