Java jpa2&x2B;标准API+;获取子查询中最早的元素

Java jpa2&x2B;标准API+;获取子查询中最早的元素,java,hibernate,jpa-2.0,criteria-api,Java,Hibernate,Jpa 2.0,Criteria Api,我有两个实体(Dataset和Item),其中第一个实体包含后一个实体的列表 @Entity class Dataset { @Id long id; List<Item> items; } @Entity class Item { @Id long id; @Temporal Date date; String someCriteria; } (如何)在JPA-2.0中做到这一点?在Java 1.6中,有两种方法(而不是min())和(而

我有两个实体(
Dataset
Item
),其中第一个实体包含后一个实体的列表

@Entity
class Dataset {
    @Id long id;
    List<Item> items;
}

@Entity
class Item {
    @Id long id;
    @Temporal Date date;
    String someCriteria;
}

(如何)在JPA-2.0中做到这一点?

在Java 1.6中,有两种方法(而不是
min()
)和(而不是
le()
)适用于Java.util.Date字段


在Java 1.5中,如果数据库中没有其他字段,似乎无法实现这一目标。

我不相信没有解决此类问题的方法。没有人知道吗?CriteriaBuilder不是Java6(=Java1.6)的一部分,而是JPA2.0的一部分,JPA2.0本身就是JavaEE6的一部分。Java5(=Java1.5)、JPA1或JavaEE5中没有标准API(因此也没有标准生成器)。
Subquery<Item> _subquery = p_criteria.subquery(Item.class);
Root<Item> _itemRoot = _subquery.from(Item.class);
_subquery.select(_itemRoot);

// correlate
_subquery.correlate(_datsetRoot);

// type check
Predicate _typeP = p_builder.equal(_itemRoot.get(Item_.someCriteria), "x");

<additional predicates>
...

// reference check
_subquery.where(_typeP);

return p_builder.exists(_subquery);
SELECT d.id
FROM Dataset d
WHERE EXISTS (
 SELECT TOP 1 *
 FROM Item i
 WHERE i.dataset_id = d.FALL_ID
    AND i.someCriteria = 'x'
 ORDER BY i.date
)
ORDER BY d.FALL_ID