如何获取最近使用JPA Criteria Query更新或修改的文件列表?

时间:2014-10-21 13:32:03

标签: java subquery jpa-2.0 criteria-api

我是JPA Criteria Query的新用户。Table包含meta-data的{​​{1}},它可能有多个条目对应files但它应该有所不同 - file name中的不同last modified date。我需要的是 - 来自Table的{​​{1}}个文件列表,但该列表应该包含最近更新或修改过的所有文件。

假设我有unique Table,其中包含TableObjectMetadata列。

file-name

我需要使用last-modified获得以下结果。 -

id, filename, lastmodified
01, A.txt,   25/10/2014
02, A.txt,   26/10/2014 
03, B.txt,   25/10/2014
04, B.txt,   27/10/2014 
05, C.txt,   25/10/2014
06, C.txt,   26/10/2014 
07, D.txt,   25/10/2014
08, D.txt,   27/10/2014  

SQL查询

JPA Criteria Query

1 个答案:

答案 0 :(得分:0)

您需要在db表和JPA实体之间建立映射,如下所示:

@Entity
public class ObjectMetadata {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    private String fileName;

    @Temporal(TemporalType.DATE)
    private Date lastModified;

    // constructors, getters, setters
}

查询可能如下所示:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();
Root<ObjectMetadata> root = cq.from(ObjectMetadata.class);
cq.multiselect(
    root.get("fileName").alias("filename"), 
    cb.greatest(root.<Date>get("lastModified").alias("lastmodified")
);
cq.groupBy(root.get("fileName"));

List<Tuple> result = em.createQuery(cq).getResultList()
for (Tuple t: result) {
    System.out.println(t.get("filename") + " " + t.get("lastmodified"));
}