2 У меня есть сущность с 4 1: n отношениями
@Entity
@Table(name="REPORT_MESSAGE")
@NamedEntityGraph(name=ReportMessage.GRAPH_ALL, attributeNodes= {@NamedAttributeNode("reportEvents"), @NamedAttributeNode("reportLabels"), @NamedAttributeNode("reportReceivers"), @NamedAttributeNode("reportSenders")})
public class ReportMessage implements Serializable {
@Id
@Column(name="REPORT_MESSAGE_ID")
private Long reportMessageId;
//bi-directional many-to-one association to ReportEvent
@OneToMany(mappedBy="reportMessage")
private List<ReportEvent> reportEvents;
//bi-directional many-to-one association to ReportLabel
@OneToMany(mappedBy="reportMessage")
private Set<ReportLabel> reportLabels;
//bi-directional many-to-one association to ReportReceiver
@OneToMany(mappedBy="reportMessage")
private Set<ReportReceiver> reportReceivers;
//bi-directional many-to-one association to ReportSender
@OneToMany(mappedBy="reportMessage")
private Set<ReportSender> reportSenders;
Я хочу использовать граф сущностей для быстрого извлечения
@Override
public List<ReportMessage> findAllEagerly() {
EntityGraph<?> graph = em.createEntityGraph(ReportMessage.GRAPH_ALL);
List<ReportMessage> reportMessages = em.createQuery("SELECT DISTINCT r FROM ReportMessage r")
.setHint("javax.persistence.loadgraph", graph)
.getResultList();
return reportMessages;
}
этот метод работает как ожидалось: у меня есть8 записей в БД, и он возвращает 8 ReportMessage. Однако, когда я добавляю в запрос paremeter, я получаю декартово произведение:
@Override
public List<ReportMessage> findForMessagidEagerly(String messageid) {
EntityGraph<?> graph = em.createEntityGraph(ReportMessage.GRAPH_ALL);
Query query = em.createQuery("SELECT DISTINCT r FROM ReportMessage r WHERE r.messageid=:messageid")
.setHint("javax.persistence.loadgraph", graph);
query.setParameter(ReportMessage.PARAM_MSG_ID, messageid);
List<ReportMessage> messages = query.getResultList();
return messages;
}
Я ожидаю получить 1 ReportMessage, но получить 84. С именованным запросомЯ получаю тот же результат.Что происходит?