有没有办法使用 JPA 映射计算属性?
假设我有一个 Invoice
对象,其中有一个或多个 InvoiceLineItems
,我想在 Invoice
类上有一个持久的计算属性这给了我总金额:
class Invoice {
...
@Column(name = "TOTAL_AMOUNT")
public BigDecimal getTotalAmount() {
BigDecimal amount = BigDecimal.ZERO;
for (InvoiceLineItem lineItem : lineItems) {
amount = amount.add(lineItem.getTotalAmount());
}
return amount;
}
}
现在,我可以创建一个 protected 空操作 setTotalAmount
方法来让 JPA 开心,但我想知道是否有办法让 JPA 知道映射只是一种方式并避免创建一个多余的 setter 方法。
谢谢, 亚历克斯
最佳答案
您所描述的不是 JPA 意义上的计算属性。您在自己的方法中自行计算 - 只需将该方法标记为 @Transient
,JPA 将忽略它。
如果您确实需要计算属性(其中“计算”表示“通过 SQL 表达式计算”),则需要根据您的 JPA 提供程序对其进行注释。对于 Hibernate,您可以通过 @Formula
注释来做到这一点:
@Formula("col1 * col2")
public int getValue() {
...
}
其他提供商可能有自己的配置方式;没有 JPA 标准。
关于java - 使用 JPA 映射计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359671/