mam Hibernate udało Java podmiot o nazwie X i funkcję natywnego SQL (myFunc), który ja nazywam z kwerendy hibernacji SQL wzdłuż tych linii:Jak najlepiej odwzorować wyniki z zapytania SQL do obiektu Java nie będącego jednostką przy użyciu Hibernuj?
SQLQuery q = hibernateSession.createSQLQuery(
"SELECT *, myfunc(:param) as result from X_table_name"
);
Co chcę zrobić, to odwzorować wszystko wróciło z to zapytanie do klasy (niekoniecznie zarządzanej przez Hibernate) o nazwie Y. Y powinno zawierać wszystkie właściwości/pola od X plus result
zwrócone przez myfunc
, np. Y może rozszerzyć klasę X i dodać pole "wyniku".
Co próbowałem:
- Próbowałem za pomocą
q.addEntity(Y.class)
ale to się nie powiedzie się:org.hibernate.MappingException: Unknown entity com.mycompany.Y
q.setResultTransformer(Transformers.aliasToBean(Y.class));
ale to się nie powiedzie się:org.hibernate.PropertyNotFoundException: Could not find setter for some_property
. X ma pole o nazwiesomeProperty
z odpowiednim programem pobierającym i ustawiającym, ale w tym przypadku nie wygląda na to, że Hibernate odwzorowuje nazwę kolumny (some_property) na poprawną nazwę pola.q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
zwraca mapę, ale wartości nie zawsze są typu oczekiwanego przez odpowiednie pole w X. Na przykład pola w X typu enum i Date nie mogą być mapowane bezpośrednio z mapy zwróconej przez zapytanie SQL (gdzie są Smyczki).
Jaki jest właściwy sposób radzenia sobie z tą sytuacją?
Eek, obsada do "Długiego". Skąd wiesz, że 'wiersz [0]' będzie miał postać 'Long'? Czy istnieje sposób wymuszania konwersji typów danych za pomocą interfejsów API Hibernate? –
@LukasEder: Skorzystaj z linku do dokumentacji, to tam jest wyjaśnione. Jednak korzystanie z zapytań SQL z Hibernate powinno być wyjątkowo wyjątkowe. W większości przypadków używasz kwerend HQL/kryteriów, a typ wyprowadza się z typu pola w twojej encji. –
Dzięki za informacje. Powinienem był całkowicie przeczytać twoją odpowiedź ...Mimo to, wciąż jest trochę trudu, aby informacje o typie musiały zostać powtórzone. –