@AttributeOverride - 将某些属性作为默认值继承

时间:2015-07-28 11:48:32

标签: java jpa mapping

可嵌入Money类中有面额字段。

@Column(scale = 4, precision = 20)
private BigDecimal denomination;

当我在某个实体类中多次使用Money类时,我必须通过@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)属性覆盖为默认值。是否可以默认继承这些属性,或者我每次都要指定它们?

1 个答案:

答案 0 :(得分:1)

不幸的是,这是不可能的。

它与JPA无关,但附带注释: 如果在运行时评估注释,例如Column.scale(),您无法判断某人是否明确设置了某个属性的值,或者该属性是否未包含在声明中。

因此,从JPA提供者的角度来看,两个定义相同:@Column()@Column(scale = 0, precision = 0)。由于提供商无法区分这两个定义,因此它始终会使用scale()返回的值 - 在您的情况下为默认值0

所以你必须明确地设置这些值 - 或者使用一些代码生成工具自动导出相应的注释(尽管我不知道哪一个会开箱即用)。