Hibernate Criteria Query per ottenere colonne specifiche

Sto usando Criteria Query nel mio codice. Spara sempre select * from ...

Invece voglio trascurare una colonna (campo) dalla mia query in quanto quel campo ha un grande numero di dati memorizzati in byte. E questo ha causato problemi di prestazioni.

Qualcuno può dare un’idea per questo?


Qualche aggiornamento

Ho aggiunto una proiezione nella mia query e ha creato una query come …

     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 ? 

    E ora il problema è come .. La Unknown column 'y4_' in 'where clause' e lo stesso errore per y8_, y5_ significa per tutti dove vicino ha dato un errore.

    L’ho modificato in Query come …

     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 ? 

    e ha funzionato. Ma non so come modificarlo in HQL?

    Usa Proiezioni per specificare quali colonne desideri restituire.

    Esempio

    SQL Query

     SELECT user.id, user.name FROM user; 

    Hibernate Alternative

     Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Projections.property("id"), "id") .add(Projections.property("Name"), "Name")) .setResultTransformsr(Transformsrs.aliasToBean(User.class)); List list = cr.list(); 

    Puoi mappare un’altra quadro in base a questa class (dovresti usare nome-entity framework per distinguere le due) e la seconda sarà una specie di dto (non dimenticare che dto ha problemi di progettazione ). dovresti definire il secondo come readonly e dargli un buon nome per essere chiaro che questa non è un’ quadro regolare. tra l’altro selezionare solo poche colonne si chiama proiezione, quindi google con esso sarà più facile.

    alternativa: è ansible creare una query denominata con l’elenco dei campi necessari (li si inserisce nella selezione) o utilizzare i criteri con la proiezione