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!