@AttributeOverride - 继承一些属性作为默认值
@AttributeOverride - inherit some attributes as default values
可嵌入货币中有面额字段 class。
@Column(scale = 4, precision = 20)
private BigDecimal denomination;
当我在某个实体 class 中多次使用 Money class 时,我必须通过 @AttributeOverride 注释覆盖列名。
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "denomination", column = @Column(name = "premium_amount")),
@AttributeOverride(name = "currencyCode", column = @Column(name = "premium_amount_currency")) })
private Money premium;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "denomination", column = @Column(name = "discount_amount")),
@AttributeOverride(name = "currencyCode", column = @Column(name = "discount_amount_currency")) })
private Money discount;
这种方式还将 (scale = 4, precision = 20) 属性覆盖为默认值。是否可以默认继承这些属性,或者我必须每次都指定它们?
很遗憾,这是不可能的。
与JPA无关,与注解有关:
如果您在运行时评估注释,例如Column.scale()
,您无法判断是否有人明确设置了某个属性的值,或者它是否未包含在声明中。
因此,从 JPA 提供者的角度来看,两个定义是相等的:@Column()
和 @Column(scale = 0, precision = 0)
。由于提供者无法区分这两个定义,它将始终使用从 scale()
返回的值 - 在您的情况下为默认值 0
。
因此您必须明确设置这些值 - 或者使用一些代码生成工具来自动派生适当的注释(尽管我不知道哪一个可以开箱即用)。
可嵌入货币中有面额字段 class。
@Column(scale = 4, precision = 20)
private BigDecimal denomination;
当我在某个实体 class 中多次使用 Money class 时,我必须通过 @AttributeOverride 注释覆盖列名。
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "denomination", column = @Column(name = "premium_amount")),
@AttributeOverride(name = "currencyCode", column = @Column(name = "premium_amount_currency")) })
private Money premium;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "denomination", column = @Column(name = "discount_amount")),
@AttributeOverride(name = "currencyCode", column = @Column(name = "discount_amount_currency")) })
private Money discount;
这种方式还将 (scale = 4, precision = 20) 属性覆盖为默认值。是否可以默认继承这些属性,或者我必须每次都指定它们?
很遗憾,这是不可能的。
与JPA无关,与注解有关:
如果您在运行时评估注释,例如Column.scale()
,您无法判断是否有人明确设置了某个属性的值,或者它是否未包含在声明中。
因此,从 JPA 提供者的角度来看,两个定义是相等的:@Column()
和 @Column(scale = 0, precision = 0)
。由于提供者无法区分这两个定义,它将始终使用从 scale()
返回的值 - 在您的情况下为默认值 0
。
因此您必须明确设置这些值 - 或者使用一些代码生成工具来自动派生适当的注释(尽管我不知道哪一个可以开箱即用)。