Hibernate Beispiele für native SQL-Abfragen

Beispiele für native SQL-Abfragen im Ruhezustand

Im Ruhezustand sollten HQL- oder Kriterienabfragen Sie in die Lage versetzen, nahezu jede gewünschte SQL-Abfrage auszuführen. Viele Entwickler beschweren sich jedoch, dass die generierte SQL-Anweisung des Ruhezustands langsam ist, und bevorzugen es, ihre eigene SQL-Anweisung (native SQL-Anweisung) zu generieren.

Beispiel für native SQL-Abfragen

Hibernate bietet einecreateSQLQuery-Methode, mit der Sie Ihre native SQL-Anweisung direkt aufrufen können.

1. In diesem Beispiel weisen Sie Hibernate an, Ihnen eine Stock.class zurückzugeben. Alle ausgewählten Daten (*) stimmen automatisch mit Ihren Stock.class-Eigenschaften überein.

Query query = session.createSQLQuery(
"select * from stock s where s.stock_code = :stockCode")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();

2. In diesem Beispiel gibt Hibernate ein Object-Array zurück.

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

Alternativ können Sie auchnamed query verwenden, um Ihre native SQL-Anweisung aufzurufen. SieheHibernate named query examples here.

Die von Hibernate generierte SQL-Anweisung ist langsam!

Ich stimme der Aussage "Die von Hibernate generierte SQL-Anweisung ist langsam" nicht zu. Oft habe ich herausgefunden, dass dies daran liegt, dass die Entwickler die Tabellenbeziehung nicht gut verstehen und einige falsche Tabellenzuordnungen vorgenommen oder die Abrufstrategien missbraucht haben. Es wird dazu führen, dass Hibernate unnötige SQL-Anweisungen generiert oder unnötige Tabellen verknüpft. Entwickler möchten diese Ausrede nutzen und eine eigene SQL-Anweisung erstellen, um den Fehler schnell zu beheben.

Fazit

Ich gebe zu, dass die native SQL-Anweisung manchmal wirklich bequemer und einfacher ist als HQL. Überlegen Sie sich jedoch genau, warum Sie eine native SQL-Anweisung benötigen. Ist das wirklich Hibernate kann es nicht? Wenn ja, dann mach weiter ~

P.S In Oracle database, i more prefer to use native SQL statement in many critical performance queries, because i need to put the “hint” to improve the Oracle query performance.