具有不同列的多个结果集的JPA实体

时间:2014-10-30 22:48:18

标签: jpa

我正在使用带有derby数据库的JPA。我想从同一个表中检索两个完全不同的屏幕上的两个不同的结果集。

屏幕1使用“ScannerReport”bean显示值。

屏幕2将显示ScannerSummaryReport bean的值。

两个bean都需要来自同一个实体“Scanner”的数据,如下面的代码所示。

如何为两个不同的结果集定义结果集映射到实体上,其中包含不同的列

A --->    Query query = em.createNativeQuery(<query for scanner report goes here >,"ScannerReport");
          query.getResultList(); 

现在A将执行并实例化ScannerReport类的对象,并用数据填充它。

B --->    Query query = em.createNativeQuery(<query for scanner summary report goes here>,"ScannerSummaryReport");
           query.getResultList();

我想以某种方式让JPA知道当我执行B时,现在它需要实例化一个不同类的对象,让我们说ScannerSummaryReport用不同的QUERY(写入计算平均值和总数)中的数据填充它并返回结果。请不要两个查询都来自同一个实体Scanner ..

@SqlResultSetMapping(
        name="ScannerReport",
        classes={
                @ConstructorResult(
                    targetClass=com.beans.ScannerReport.class,
                    columns={
                        @ColumnResult(name="scanYear", type=Integer.class),                     
                        @ColumnResult(name="julianDay", type=Integer.class),                        
                        @ColumnResult(name="scannerId", type=String.class),                                 
                        @ColumnResult(name="startTime", type=Long.class),                                   
                        @ColumnResult(name="endTime", type=Long.class),                                 
                        @ColumnResult(name="scanTime", type=Long.class),                                    
                    }
                )           
            }
        )
@Entity
public class Scanner  {

// Class implementation goes here

}

1 个答案:

答案 0 :(得分:6)

所以只需使用@SqlResultSetMappings注释定义两个SqlResultSetMappings,每个查询一个。有关示例,请参阅http://www.datanucleus.org/products/accessplatform_4_0/jpa/annotations.html#SqlResultSetMappings