Mój bean Java ma właściwość childCount. Ta właściwość nie jest zamapowana na kolumnę bazy danych . Zamiast tego powinien być obliczany przez bazę danych z COUNT()
funkcją działającą na złączeniu mojego beana Java i jego elementów podrzędnych. Byłoby jeszcze lepiej, gdyby ta nieruchomość mogła być obliczana na żądanie / „leniwie”, ale nie jest to obowiązkowe.
W najgorszym przypadku mogę ustawić właściwość tej fasoli za pomocą HQL lub Criteria API, ale wolałbym tego nie robić.
@Formula
Adnotacja Hibernate może pomóc, ale ledwo mogłem znaleźć jakąkolwiek dokumentację.
Każda pomoc mile widziana. Dzięki.
@Formula
Adnotacja używa języka SQL, a nie HQL.Jak wyjaśniono w tym artykule , masz trzy opcje:
@Transient
metody@PostLoad
nasłuchiwania encji@Formula
adnotacji specyficznej dla HibernatePodczas gdy Hibernate umożliwia użycie @Formula , w przypadku JPA można użyć wywołania zwrotnego @PostLoad, aby wypełnić właściwość przejściową wynikiem pewnych obliczeń:
W przypadku bardziej złożonych zapytań możesz użyć Hibernacji
@Formula
, jak wyjaśniono w tym artykule :źródło
Spójrz na widoki jednostek Blaze-Persistence, które działają na szczycie JPA i zapewniają pierwszorzędną obsługę DTO. Możesz rzutować wszystko na atrybuty w widokach encji, a nawet, jeśli to możliwe, ponownie użyje istniejących węzłów łączenia dla skojarzeń.
Oto przykładowe mapowanie
Pobranie tego spowoduje wygenerowanie zapytania JPQL / HQL podobnego do tego
Oto post na blogu o niestandardowych dostawcach podzapytań, który również może być dla Ciebie interesujący: https://blazebit.com/blog/2017/entity-view-mapping-subqueries.html
źródło
próbowałem tego na moim kodzie
błędy, które otrzymuję, gdy uruchamiam i wyświetlam mój widok, nawet przed próbą wyświetlenia kolumny na wąsach, są podobne do tego
Pytanie, które zadałem, brzmi: czy istnieje sposób, aby uzyskać wartości kolumny obliczonej przy użyciu JPA / Hibernate z mySQL?
Co ja robię źle ?
źródło