我正在使用带有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
}
答案 0 :(得分:6)
所以只需使用@SqlResultSetMappings注释定义两个SqlResultSetMappings,每个查询一个。有关示例,请参阅http://www.datanucleus.org/products/accessplatform_4_0/jpa/annotations.html#SqlResultSetMappings