Обучение написанию JPA-запроса. Пожалуйста, сообщите мне, возможно ли более эффективно написать приведенные ниже запросы, возможно, в одном операторе выбора. Может быть объединение, но не уверен, как это сделать.
class Relationship {
@ManyToOne
public String relationshipType; //can be MANAGER, CUSTOMER etc
@ManyToOne
public Party partyFrom; // a person who has a relation
@ManyToOne
public Party partyTo; // a group a person relate to
}
Запросы:
String sql = "";
sql = "select rel.partyTo";
sql += " from Relationship rel";
sql += " where rel.partyFrom = :partyFrom";
sql += " and rel.relationshipType= :typeName";
Query query = Organization.em().createQuery(sql);
query.setParameter("partyFrom", mgr1);
query.setParameter("typeName", "MANAGER");
List<Party> orgList = query.getResultList();
String sql2 = "";
sql2 = "select rel.partyFrom";
sql2 += " from Relationship rel";
sql2 += " where rel.partyTo = :partyToList";
sql2 += " and rel.relationshipType = :typeName2";
Query query2 = Organization.em().createQuery(sql2);
query2.setParameter("partyToList", orgList);
query2.setParameter("typeName2", "CUSTOMER");
List<Party> personList2 = query2.getResultList();
Оба запроса работают. Запрос 1 возвращает список групп, где человек (mgr1) имеет отношение МЕНЕДЖЕР с. Запрос 2 возвращает всех людей, которых они являются ЗАКАЗЧИКАМИ, в группы, возвращаемые запросом 1. По сути, я получаю список людей, которым они принадлежат (клиент), в той же группе, в которой у человека (mgr1) есть отношение МЕНЕДЖЕР. *
Можно ли объединить их в один оператор SQL, поэтому возможно только один доступ к БД?