1

我正在使用 JPA/JFreeChart 来显示我用微控制器收集的数据,但是,我每 10 秒测量 14 个传感器。我已经测量了两个多月,我有超过 7000000 组数据。

现在到我的实际问题,因为我不想每次启动程序时都加载 7000000 行,所以我只想按分钟/小时使用平均值。我曾考虑过使用 NamedQuery,但是我不知道如何保持其中的关系并让 JPA 使用它,因为到目前为止,数据的加载已经由 JPA 本身完成。也许我可以通过添加更多注释来解决这个问题?

@OneToMany(mappedBy="sensor")
@OrderBy("timestamp ASC")
public List<Value> getValues() {
    return this.values;
}

提前致谢!

此致

4

1 回答 1

1

直接 JPA 不允许过滤结果,因为这意味着实体的关系不再准确反映数据库中的内容,并且必须标准化将实体添加到不在集合中的关系时所做的行为,但已存在于数据库中。

这种映射最简单的方法是将属性标记为@Transient。然后,您可以在需要时使用 get 方法从数据库中读取值,并在需要时将它们缓存在实体中。

许多提供商确实允许向用于引入映射的查询添加过滤器,例如 EclipseLink 允许在映射上设置 @AdditionalCriteria,如下所述:http://wiki.eclipse.org/EclipseLink/Development/AdditionalCriteria或者您可以修改映射直接如图所示:http: //wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria

于 2013-05-10T18:10:18.887 回答