有两种方法,但它们是有限的,我怀疑你会真正喜欢它们:(
主要的限制是在 Hibernate HQL 中你不能调用方法,除非它们是映射属性 - 故事结束。Hibernate 不支持方法调用
另一方面,只要您记住只有一个映射可以更新,您就可以根据需要多次映射一个列。记住这一点 第一步是你需要做的 Hibernate 知道joda Money。显然你不能只是注释它。您有两种方法可以做到这一点:
您可以使用 XML 将 Money 类实际注释为 @Embeddable 类。XML hibernate 配置可用于配置封闭源代码的东西。从我在 Money joda - time 配置中看到的。
第二种解决方案。可能是我会使用的那个。是将 Money 类包装在声明为 @Embeddable 的 Wrapper 中。这个嵌入式包装器可以为现有的数据库列定义多个映射。当您为 WRAPER 设置一个值时,该值将被推送到里面的苏打水时间。
完成此操作后,您可以通过包装器公开您想要的 Money 类的任何属性并进行任何您想要的聚合。
@Embeddable
public class MoneyWrapper {
@Columns(columns = { @Column(name = "total_currency", length=10), @Column(name = "total") })
@Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency")
Money totalmoney;
@Column(name = "total",updateable=false,insterable=false);
BigDecimal total to agregate;
@Column(name = "total_currency",updateable=false,insterable=false);
BigDecimal totalCurrency;
}
由于此映射,您可以执行如下查询:
@Query(value="select select sum(oi.total.totalCurrency) from OrderItem oi where oi.order = ?1")