我是JPA Criteria Query
的新用户。Table
包含meta-data
的{{1}},它可能有多个条目对应files
但它应该有所不同 - file name
中的不同last modified date
。我需要的是 - 来自Table
的{{1}}个文件列表,但该列表应该包含最近更新或修改过的所有文件。
假设我有unique
Table
,其中包含Table
和ObjectMetadata
列。
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
答案 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"));
}