Vraag Slagwoordcriterium Query om specifieke kolommen te krijgen


Ik gebruik Criteriorquery in mijn code. Het vuurt altijd select * from ...

In plaats daarvan wil ik één kolom (veld) uit mijn query verwaarlozen omdat dat veld een groot aantal gegevens bevat die zijn opgeslagen in bytes. En dat veroorzaakt problemen met de prestaties.

Kan iemand daar een idee voor geven?


Sommige updates

Ik heb een projectie in mijn query toegevoegd en er is een query gemaakt zoals ...

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 ?

En nu is kwestie als .. Unknown column 'y4_' in 'where clause' en dezelfde fout voor y8_, y5_ betekent voor iedereen waar dichtbij gaf het een fout.

Ik heb het gewijzigd in Query zoals ...

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 ?

en het werkte. Maar ik weet niet hoe ik het in HQL moet wijzigen?


42
2017-07-24 08:13


oorsprong


antwoorden:


Gebruik projecties om op te geven welke kolommen u wilt retourneren.

Voorbeeld

SQL-query 

SELECT user.id, user.name FROM user;

Slaapstand alternatief

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();

86
2017-07-24 08:20



U kunt een andere entiteit toewijzen op basis van deze klasse (u moet de entiteitsnaam gebruiken om de twee te onderscheiden) en de tweede zal een soort van dto zijn (vergeet dat niet) dto heeft ontwerpproblemen ). u moet de tweede alleen lezen en een goede naam geven om duidelijk te maken dat dit geen vaste entiteit is. Trouwens, slechts enkele kolommen worden projectie genoemd, dus google ermee wordt eenvoudiger.

alternatief - u kunt een naamzoekopdracht maken met de lijst met velden die u nodig hebt (u plaatst ze in de selectie) of gebruik criteria met projectie


0
2017-07-24 08:20