Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个JPA列映射到单个数组_Jpa - Fatal编程技术网

将多个JPA列映射到单个数组

将多个JPA列映射到单个数组,jpa,Jpa,我目前正在使用JPA移植一些遗留代码,在试图将其中一个表简化为实体时遇到了问题 我有一个24小时内每半小时采集的各种读数表。 它看起来像: Date |R1|R2|R3...R48 1/1/2012,1,5,1,3,3,4,5,5....etc 我希望我的实体bean看起来像: @Entity public class Reading { @Id String date; @?? int[] values; @??? int su

我目前正在使用JPA移植一些遗留代码,在试图将其中一个表简化为实体时遇到了问题

我有一个24小时内每半小时采集的各种读数表。 它看起来像:

Date     |R1|R2|R3...R48

1/1/2012,1,5,1,3,3,4,5,5....etc
我希望我的实体bean看起来像:

@Entity
public class Reading {

    @Id
    String date;

    @??
    int[] values;

    @???
    int sumOfValues
}
有什么建议可以帮助我解决这个问题吗?有可能吗?此外,我只想阅读这些值,如果这使它更容易。 我在MongoDB中使用EclipseLink 2.4

**更新**

几乎拥有它-但需要以某种方式保持顺序(我认为字段映射的顺序不正确)-或传递对列名的引用:

@Entity  
@Customizer (RawDataCustomizer.class)  
public class Reading {  
private List<Integer> values...  
public void setValue(Integer value)...  
public static class RawDataCustomizer implements DescriptorCustomizer {  

    @Override  
    public void customize(ClassDescriptor descriptor) throws Exception {  
    //loses ordering?  
    for (int i=1; i<=48; i++)  
    descriptor.addDirectMapping("R"+i, "getValue", "setValue", "r"+i);  

}  
@实体
@定制器(RawDataCustomizer.class)
公开课阅读{
私有列表值。。。
公共无效设置值(整数值)。。。
公共静态类RawDataCustomizer实现DescriptorCustomizer{
@凌驾
public void customize(类描述符描述符)引发异常{
//失去秩序?

对于(int i=1;i我认为您不能告诉JPA立即映射到数组。您需要映射每个列,并执行一些自定义代码来创建数组:

  • 在答案中使用@Embedded like
  • 或者将@namedNaviQuery与类似的查询一起使用

    从MYTABLE中选择日期,conact(R1’,’,R2’,’,R3,…)作为R

在setter中:

public void setR(String r) {
  String[] myarray = r.split(',');
  // Convert String[] to int[] and compute sum
}

注意,第二种解决方案实际上是一种变通方法。我有权映射所有列,并使用@Customizer(一点也不理想)在实体外部进行计算最终解决方案,但目前效果很好:

public static class RawDataMapping extends EISDirectMapping  {
    private final int index;
    public RawDataMapping(int index, String attributeName,String fieldName) {
        super();
        this.index = index;
        setAttributeName(attributeName);
        setFieldName(fieldName);
        setAttributeAccessor(new CustomAccessorAttributeAccessor(this));
    }
    public void set(Object object, Object value)...
    public Object get(Object object)...
}

我更喜欢@Embedded方法——但实际上这只会给我一个充满离散字段的类,转换为数组仍然很难。理想情况下,我喜欢
@Embedded R;公共静态类R{@Collection(“rs”)private int r1;private int r2…public List getRs();}