Учимся писать 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) имеет отношения MANAGER. Запрос 2 возвращает всех Лиц, которым они являются КЛИЕНТОМ, в группы, возвращенные запросом 1. Фактически, я получаю список Лиц, к которым они принадлежат (клиенты), той же группы, с которой Человек (mgr1) имеет отношение МЕНЕДЖЕР.
Можно ли объединить их в один оператор sql, чтобы, возможно, был доступен только один доступ к базе данных?