【发布时间】:2013-11-15 07:35:19
【问题描述】:
我目前正在努力使用 JPA Criteria API 创建查询。我想动态构建我的查询。使用元模型和类型化查询对我来说是没有选择的。 假设我有以下实体:
@Entity
@Table(name = "MYENTITY")
public class MyEntity {
...
@OneToMany(mappedBy = "myEntity", fetch = FetchType.LAZY)
private Set<MyRelatedEntity> myRelatedEntities;
...
}
@Entity
@Table(name = "MYRELATEDENTITY")
public class MyRelatedEntity {
...
@ManyToOne
@JoinColumn(name = "MYENTITY", nullable = false)
private MyEntity myEntity;
...
}
我尝试通过加入“MyEntity”来查询“MyRelatedEntity”中的字段:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Object[]> query = builder.createQuery(Object[].class);
Root<MyEntity> root = query.from(MyEntity.class);
root.join("myRelatedEntities");
query.select(builder.array(root.get("myRelatedEntities").get("name")));
Query queryCriteria = em.createQuery(query);
List<Object[]> resultRows = queryCriteria.getResultList();
resultRows 是一个空列表,尽管直接在数据库上的以下查询给了我结果:
Select myrelent.name from MYENTITY myent, MYRELATEDENTITY myrelent where myent.id = myrelent.myentity;
使用条件 API 构建的查询有什么问题?任何帮助表示赞赏!
【问题讨论】:
-
问题是……?
-
如果你还是要无类型,为什么不使用 JPQL 并为自己节省一个 PITA?
-
@kostja:如果字符串“name”是动态生成的,那是完全合理的。
标签: hibernate jpa one-to-many criteria criteria-api