Heim  >  Artikel  >  Datenbank  >  Wie spezifiziere ich bestimmte Spalten in Hibernate-Kriterienabfragen?

Wie spezifiziere ich bestimmte Spalten in Hibernate-Kriterienabfragen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 11:08:30872Durchsuche

How to Specify Specific Columns in Hibernate Criteria Queries?

Bestimmte Spalten in Hibernate-Kriterienabfragen angeben

Im Ruhezustand ruft die Standardkriterienabfrage alle Spalten aus der Zieltabelle ab. Aus Leistungs- oder Sicherheitsgründen ist es jedoch häufig wünschenswert, bestimmte Spalten auszuschließen. So erreichen Sie dies:

Verwenden von Projektionen

Mit Projektionen können Sie die spezifischen Spalten angeben, die Sie abrufen möchten. Dies kann erreicht werden, indem die Methode Projections.projectionList() verwendet und die gewünschten Eigenschaften hinzugefügt werden:

<code class="java">Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"));</code>

Umgang mit Aliaskonflikten

Bei der Verwendung von Projektionen ist dies erforderlich Behandeln Sie Aliaskonflikte, da Hibernate Aliase für die zurückgegebenen Spalten generiert. Um dieses Problem zu beheben, können Sie die Methode setResultTransformer() mit Transformers.aliasToBean() verwenden, um die Ergebnisse in ein erwartetes Objekt umzuwandeln:

<code class="java">cr.setResultTransformer(Transformers.aliasToBean(User.class));</code>

Abfragebeispiel

Betrachten Sie die aktualisierte Abfrage in Ihrem Beitrag, um bestimmte Spalten abzurufen:

<code class="sql">select
    this_.TEMPLATE_ID,
    this_.TEMPLATE_NAME,
    this_.CREATE_DATE,
    this_.UPDATE_DATE,
    this_.STATUS_CODE,
    this_.USER_ID
from
    templates this_ 
where
    this_.STATUS_CODE = 1
    and this_.PRACTICE_ID = 1 
    and this_.USER_ID in (1, 2) 
order by
    this_.TEMPLATE_NAME asc
limit ?</code>

Um dies in eine Hibernate-Kriterienabfrage zu übersetzen, können Sie den folgenden Code verwenden:

<code class="java">Criteria cr = session.createCriteria(Template.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("TEMPLATE_ID"), "TEMPLATE_ID")
      .add(Projections.property("TEMPLATE_NAME"), "TEMPLATE_NAME")
      .add(Projections.property("CREATE_DATE"), "CREATE_DATE")
      .add(Projections.property("UPDATE_DATE"), "UPDATE_DATE")
      .add(Projections.property("STATUS_CODE"), "STATUS_CODE")
      .add(Projections.property("USER_ID"), "USER_ID"))
    .add(Restrictions.eq("this_.STATUS_CODE", 1))
    .add(Restrictions.eq("this_.PRACTICE_ID", 1))
    .add(Restrictions.in("this_.USER_ID", Arrays.asList(1, 2)))
    .addOrder(Order.asc("this_.TEMPLATE_NAME"))
    .setResultTransformer(Transformers.aliasToBean(Template.class));</code>

Das obige ist der detaillierte Inhalt vonWie spezifiziere ich bestimmte Spalten in Hibernate-Kriterienabfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn