在内联抽象类型时,根据子类使用不同的投影

时间:2016-04-21 14:53:41

标签: java spring spring-data-rest

我有以下实体(省略了相关部分):

@Entity    
public class Chart {

    @ManyToOne
    private Parameter parameter;

}

@Entity
@DiscriminatorColumn(name="category")
public abstract class Parameter {

    private String label;    

    @OneToMany(mappedBy="parameter")
    private Set<TimeSerie> timeSeries = new HashSet<TimeSerie>();

    ...
}

@Entity
@DiscriminatorValue(value="analog")
public class AnalogParameter extends Parameter {

    private String resolution;

}

@Entity
@DiscriminatorValue(value="digital")
public class DigitalParameter extends Parameter {
    ...
}

以下投影和嵌套投影:

@Projection(name = "parameterInlinedChart, types = { Chart.class })
public interface ParameterInlinedChart {
    TimeSeriesInlinedParameter getParameter();
}

@Projection(name = "timeSeriesInlinedParameter , types = { Parameter.class })
public interface TimeSeriesInlinedParameter {
    ...
}

当使用&#39; parameterInlinedChart&#39;时,我想使特定于抽象Parameter类的childs类的属性出现在JSON输出上。投影。

使用上面的例子,我希望得到&#34;解决方案&#34;如果参数的类型为AnalogParameter,则为AnalogParameter的属性。

只需在&#34; timeSeriesInlinedParameter&#34;上添加此属性如果参数的类型为DigitalParameter

,则投影会抛出异常

我尝试为AnalogParameter和DigitalParameter创建独有的投影 但我不知道如何告诉&#34; parameterInlinedChart&#34;投影到conditionnaly使用权限取决于要序列化的子参数类的类型。

甚至可能吗?

问题可能不容易理解,如果需要,我可以提供更多细节。

1 个答案:

答案 0 :(得分:2)

目前无法做到这一点。我为此创建了an Improvement request,甚至在a Pull Request中实现了此功能。不可否认,这需要对Jackson2序列化模块的现有结构进行大量更改,并引入一个新字段来支持投影层次结构,因此不清楚何时将其合并。

如果这对你很重要,也许你可以投票支持JIRA问题。