我有以下实体(省略了相关部分):
@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使用权限取决于要序列化的子参数类的类型。
甚至可能吗?
问题可能不容易理解,如果需要,我可以提供更多细节。
答案 0 :(得分:2)
目前无法做到这一点。我为此创建了an Improvement request,甚至在a Pull Request中实现了此功能。不可否认,这需要对Jackson2序列化模块的现有结构进行大量更改,并引入一个新字段来支持投影层次结构,因此不清楚何时将其合并。
如果这对你很重要,也许你可以投票支持JIRA问题。