StringBuffer buffer = new StringBuffer();
buffer.setLength(0);
buffer.append("select phone.name,phone.id,object.name,object.id from Phone as phone");
if(isA){
buffer.append("left outer join A as object where object.id=phone.id")
}
else{
buffer.append("left outer join B as object where object.id=phone.id")
}
我在舊代碼中有這樣的 SQL 命令。我必須將其轉換為 JPA。
如果我在電話和 A 和 B 之間沒有任何關系,如何使用標準查詢來實作?
uj5u.com熱心網友回復:
如果Phone是由 JPA 管理但不是Aand的物體B,則可以使用本機查詢而不是CriteriaAPI。通過這種方式,您可以按原樣從舊代碼中獲取 SQL 查詢并將其與 JPA 一起使用。
String nativeSql = buffer.toString();
List<Phone> phones = entityManager.createNativeQuery(nativeSql, Phone.class).getResultList();
uj5u.com熱心網友回復:
不幸的是,JPA Criteria 無法做到這一點,因為目前還沒有 API。在 Hibernate 6.0 中將有一個擴展支持這一點。
現在,您可以繼續連接 JPQL 片段,就像您似乎所做的那樣,或者使用像Blaze-Persistence這樣的支持此功能的查詢構建器:
CriteriaBuilder<Tuple> cb = criteriaBuilderFactory.create(entityManager, Tuple.class);
cb.from(Phone.class, "p");
cb.select("p.name").select("p.id").select("o.name").select("o.id");
if(isA) {
cb.leftJoin(A.class, "o").on("o.id").eqExpression("p.id").end();
}
else{
cb.leftJoin(B.class, "o").on("o.id").eqExpression("p.id").end();
}
List<Tuple> result = cb.getResultList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318579.html
