java - @AttributeOverride - 继承一些属性作为默认值

标签 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;

这种方式还将(比例= 4,精度= 20)属性覆盖为默认值。是否可以默认继承这些属性,或者我每次都必须指定它们?

最佳答案

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

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

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

因此,您必须显式设置这些值 - 或使用某种代码生成工具来自动派生适当的注释(尽管我不知道哪个工具可以开箱即用地执行此操作)。

关于java - @AttributeOverride - 继承一些属性作为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31675428/

相关文章:

function - Julia:通过 map() 函数将关键字参数传递给函数

java - 添加到 GUI 后动态更改 JLabel 图标?

java - 什么是最简单和简约的 java xml api?

java - 为什么我收到 HHH015011 : Unable to locate static metamodel field?

java - 值(value)返回方法JPQL的最佳实践是什么

python - 使用 lambda 映射带有 *args 的函数

java - Gson如何获取序列化名称

java - 无法在 html 页面中加载 Css 文件

java - 无法确定关系属性的目标实体

java - 推土机日期映射