Oryginalne zapytanie, które mam, jest nieco skomplikowane, ale staram się uzyskać obiekt AlertCondition plus kilka dodatkowych pól.JPQL Konstruktor Wyrażenia, jak z niecierpliwością pobierać główną encję w "wybierz nowy"
+ " SELECT new org.rhq.core.domain.alert.composite.AlertConditionEventCategoryComposite " //
+ " (" //
+ " ac, " //
+ " res.id " //
+ " ) " //
+ " FROM AlertCondition AS ac FETCH ALL PROPERTIES " //
+ " JOIN ac.alertDefinition ad " //
+ " JOIN ad.resource res " //
+ " WHERE " + AlertCondition.RECOVERY_CONDITIONAL_EXPRESSION //
+ " AND (res.agent.id = :agentId OR :agentId IS NULL) " //
+ " AND ad.enabled = TRUE " //
+ " AND ad.deleted = FALSE " //
+ " AND ac.category = 'EVENT' " //
+ "ORDER BY ac.id"), //
Problemem jest hibernacji tylko wybiera identyfikator AlertCondition, więc podczas uzyskiwania dostępu do tego celu, to kończy się wymagające n + 1, podczas gdy wybiera ja jak to zrobić tylko 1.
select jest tylko ściągam kolumnę ID, zgodnie z debugowania:
select alertcondi0_.ID as col_0_0_, alertdefin1_.ID as col_1_0_, resource2_.ID as col_2_0_
Co próbuję wrócić są wszystkie pola z * AlertCondition.
Nie mogę znaleźć żadnego sposobu na zrobienie tego pod Hibernuj. JOIN FETCH
również tutaj nie działa.
Alternatywą jest wybranie każdej kolumny tabeli, której chciałbym uniknąć.
Jaki jest Twój wywołanie zapytania do tego select? Jaka jest zawartość Twojego obiektu AlertCondition? – Dherik
Cześć, tak, ponieważ używasz niestandardowego wyrażenia konstruktora, musimy sprawdzić, czy w twoim obiekcie AlertCondition znajduje się pasujący konstruktor – chrismarx