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