java - 使用 JPA 映射计算属性

标签 java jpa persistence

有没有办法使用 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/

相关文章:

java - Maven 无法定位持久单元

java - Jax-RS 和 Xmlhttp 通信

java - modelAndView返回后执行任务

angularjs - $http.post 方法中的 415(不支持的媒体类型)

java - 如何使用 JPA 的 JPQL 连接两个表

java - 将数据存储在应用程序中

docker - 将Docker用于持久数据的好处是什么

java - java中如何读取Xml?

java - Sonarqube 6.7x 的安全插件

postgresql - 在orm.xml(Spring Data/JPA 2.1/Hibernate 5.3.7/Postgresql)中定义@Type?