当前位置: 代码迷 >> java >> Spring数据条件投影无法按预期工作
  详细解决方案

Spring数据条件投影无法按预期工作

热度:111   发布时间:2023-07-17 20:14:21.0

基本上,我有两个字段“ totalAmountWithShipping”和“ totalAmountPlusShipping”,并且如果“ totalAmountWithShipping”大于0,则想将“ totalAmountWithShipping”投影到一个名为“ realTotalAmount”的新字段,否则将“ totalAmountPlusShipping”投影到“ realTotalAmount”。

我尝试了这个:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.`when`(
                            ComparisonOperators.Eq.valueOf("totalAmountWithShipping").equalToValue(0.0)
                    ).thenValueOf("totalAmountPlusShipping").otherwiseValueOf("totalAmountWithShipping")).`as`("realTotalAmount")

但如果条件为true,则始终在“ realTotalAmount”上获得0.0(即,如果我投影“ totalAmountPlusShipping”)。 但是,如果条件为假,它将按应有的方式工作。

如果我尝试:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.`when`(
                            ComparisonOperators.Eq.valueOf("totalAmountWithShipping").equalToValue(0.0)
                    ).then(100.0).otherwise(1.0)).`as`("realTotalAmount")

它按预期工作。

由于您要传递对该字段的引用,因此请在字段名称中使用“ $”。 以下查询应该工作:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.when(
                            ComparisonOperators.Eq.valueOf("$totalAmountWithShipping").equalToValue(0.0)
                    ).thenValueOf("$totalAmountPlusShipping").otherwiseValueOf("$totalAmountWithShipping")).as("realTotalAmount")
  相关解决方案