我目前正忙於使用JPA Criteria API創建查詢。我想動態構建我的查詢。使用元模型和類型查詢對我來說是沒有選擇的。 假設我有以下實體:Criteria API join untyped:查詢來自相關實體的值(一對多)
@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構建的有什麼問題?任何幫助表示讚賞!
問題是...? – Taylor
如果你反正無類型化,爲什麼不使用JPQL併爲自己節省一個PITA? – kostja
@kostja:如果字符串「名稱」是動態生成的,這是非常有意義的。 – perissf