Frage

Ich habe eine Abfrage wie unter

select f.id, s.name, ss.name
from first f
left join second s on f.id = s.id
left join second ss on f.sId = ss.id

Wenn ich HQL verwenden könnte, würde ich verwendet habe, HQL Konstruktor Syntax direkt bevöl DTO mit der Ergebnismenge. Aber da Hibernate nicht links erlaubt beitreten, ohne einen Verein an Ort und Stelle, die muß ich die Native-SQL-Abfrage verwenden.

Zur Zeit bin ich Looping durch die Ergebnismenge in JDBC-Stil und bevölkern DTO-Objekte. Gibt es einen einfacheren Weg, um es zu erreichen?

War es hilfreich?

Lösung

Sie könnten vielleicht ein Ergebnis Transformator verwenden. Zitiert Hibernate 3.2: Transformatoren für HQL und SQL :

  

SQL Transformers

     

Mit nativen SQL-Rückkehr nicht-Einheit   Bohnen oder Karte ist oft nützliche   statt Grund Object[]. Mit   Transformatoren, die zur Folge haben jetzt   möglich.

List resultWithAliasedBean = s.createSQLQuery(
  "SELECT st.name as studentName, co.description as courseDescription " +
  "FROM Enrolment e " +
  "INNER JOIN Student st on e.studentId=st.studentId " +
  "INNER JOIN Course co on e.courseCode=co.courseCode")
  .addScalar("studentName")
  .addScalar("courseDescription")
  .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))
  .list();

StudentDTO dto =(StudentDTO) resultWithAliasedBean.get(0);
     

Tipp: die addScalar() Anrufe waren   erforderlich auf HSQLDB, um es ein zu machen Match   Eigenschaftsname, da es Spalte zurückgibt   Namen in Großbuchstaben (z.B.   "NAME DES STUDENTEN"). Dies könnte auch sein,   mit einem benutzerdefinierten Transformator gelöst, dass   suchen Sie die Eigenschaftsnamen statt   genaue Übereinstimmung mit - vielleicht sollten wir   stellt eine fuzzyAliasToBean () Methode;)

Referenzen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top