2014-05-07 9 views
7

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ąć.

+0

Jaki jest Twój wywołanie zapytania do tego select? Jaka jest zawartość Twojego obiektu AlertCondition? – Dherik

+0

Cześć, tak, ponieważ używasz niestandardowego wyrażenia konstruktora, musimy sprawdzić, czy w twoim obiekcie AlertCondition znajduje się pasujący konstruktor – chrismarx

Odpowiedz

-1

Można powiedzieć hibernacji pobrać reklamę z:

JOIN FETCH ac.alertDefinition ad