我刚刚将所有的java.math.BigDecimal
用法都转换成了javax.money.MonetaryAmount
(它们代表货币)。我现在使用MoneyUtils
来“假定”货币为USD,以避免添加额外的数据库列,这些列中只包含“USD”。这可以在下面的两个代码片段中看到。
第一个
我有一个@Repository
方法,它应该会给予我一个和,如果没有匹配的行,它可能是null
:
@Query("query that can return null or a numeric")
MonetaryAmount sumSomeData();
问题是它不通过我的MonetaryAmountConverter
。我尝试直接向方法添加一个@Convert
,但没有成功。
@Query("query that can return null or a numeric")
@Convert(converter = MonetaryAmountConverter.class)
MonetaryAmount sumSomeData();
因此,带有@Converter(autoApply = true)
的AttributeConverter
似乎适用于JPA实体字段,但不适用于方法返回类型,即使将@Convert
添加到方法签名中也是如此。
- 我是不是漏掉了什么?
- 有没有一种方法可以做到这一点,而不需要在这个存储库方法的调用者中手动进行转换?
1条答案
按热度按时间cyej8jka1#
可以使用构造函数表达式:
SELECT子句标识要作为查询结果返回的对象和值。除非另有说明,否则第11.4节“表达式”中讨论的表达式都是有效的选择表达式。有关根据SELECT子句中指定的值类型处理结果的信息,请参阅第11.10节“查询API”。
有一种特定的表达式类型只在select子句中有效。Hibernate将此称为“动态示例化”。JPQL支持其中的一些特性,并将其称为“构造函数表达式”
一般示例:
在你问之前,不行,你不能调用方法,只能调用构造函数。另外,你需要考虑到你的查询可能返回
null
。你可以写一个 Package 类。