Hibernate criteria Query to get specific columns
Używam criteria Query w moim kodzie. Zawsze odpala select * from ...
Zamiast tego chcę zaniedbać jedną kolumnę (pole) z mojego zapytania, ponieważ pole to ma dużą liczbę danych przechowywanych w bajtach. I to powoduje problemy z wydajnością.
Czy ktoś może dać na to jakiś pomysł?Niektóre Aktualizacje
Dodałem projekcję w moim zapytaniu i stworzyło zapytanie typu...
select
this_.TEMPLATE_ID as y0_,
this_.TEMPLATE_NAME as y1_,
this_.CREATE_DATE as y2_,
this_.UPDATE_DATE as y3_,
this_.STATUS_CODE as y4_,
this_.USER_ID as y5_,
this_.UPDATED_BY as y6_,
this_.CATEGORY_ID as y7_,
this_.PRACTICE_ID as y8_
from
templates this_
inner join
user user1_
on this_.USER_ID=user1_.USER_ID
inner join
template_categories category2_
on this_.CATEGORY_ID=category2_.CATEGORY_ID
where
y4_=?
and y8_=?
and y5_ in (
?, ?
)
order by
y1_ asc limit ?
A teraz problem jest jak.. Unknown column 'y4_' in 'where clause'
i ten sam błąd dla y8_, y5_ oznacza dla wszystkich, gdzie blisko to dało błąd.
Zmodyfikowałem go na query like ...
select
this_.TEMPLATE_ID as y0_,
this_.TEMPLATE_NAME as y1_,
this_.CREATE_DATE as y2_,
this_.UPDATE_DATE as y3_,
this_.STATUS_CODE as y4_,
this_.USER_ID as y5_,
this_.UPDATED_BY as y6_,
this_.CATEGORY_ID as y7_,
this_.PRACTICE_ID as y8_
from
templates this_
inner join
user user1_
on this_.USER_ID=user1_.USER_ID
inner join
template_categories category2_
on this_.CATEGORY_ID=category2_.CATEGORY_ID
where
this_.STATUS_CODE=1
and this_.PRACTICE_ID=1
and this_.USER_ID in (
1, 2
)
order by
y1_ asc limit ?
I zadziałało. Ale nie wiem jak to zmodyfikować w HQL? 2 answers
Użyj rzuty , Aby określić, które kolumny mają zostać zwrócone.
Przykład
zapytanie SQL
SELECT user.id, user.name FROM user;
Alternatywa Hibernate
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))
.setResultTransformer(Transformers.aliasToBean(User.class));
List<User> list = cr.list();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-26 09:23:46
Możesz odwzorować inny encja na podstawie tej klasy (powinieneś użyć encji-name, aby odróżnić te dwie), a drugi będzie rodzajem dto (nie zapomnij, że dto ma problemy z projektowaniem ). powinieneś zdefiniować drugi jako readonly i nadać mu dobrą nazwę, aby było jasne, że nie jest to zwykły byt. przy okazji wybierz tylko kilka kolumn nazywa projekcji, więc google z nim będzie łatwiejsze.
Alternatywa - możesz utworzyć nazwane zapytanie z listą pól które potrzebujesz (umieszczasz je w select ) lub użyj kryteriów z projekcją
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-24 08:20:02