2011-01-14 2 views
0

Gibt es eine Möglichkeit, Hibernate Entitätsattributnamen in einer systemeigenen SQL-Abfrage zu ersetzen (erstellt von Session.createSQLQuery())?Verwenden der Hibernate-Attributzuordnung in einfacher SQL-Abfrage

Ich möchte eine Abfrage erstellen, wo beliebige Spalten abgerufen werden, die in einer Hibernate Einheit führen nicht, ähnlich wie diese

SELECT t1.attr1, t2.attr2, t3.attr3 WHERE t1.attr1 = 'foo' AND t2.attr2 = ... 

mit „attr1“, „attr2“, ... sind Java Eigenschaftsnamen, die automatisch von Hibernate zugeordnet werden sollen.

Ich habe SQLQuery.addEntity() gesehen, aber das scheint auf der Ergebnismenge zu arbeiten, nicht auf der Abfrage.

Gibt es eine Möglichkeit, Attributnamen in einer Abfrage zu ersetzen, oder ein Tool, mit dem ich einfach auf die von Hibernate generierten Zuordnungen zugreifen kann, ohne die Anmerkungen zu einer Entität selbst prüfen zu müssen?

Danke!

Antwort

0

Wenn Sie nur SQL-Abfragen verwenden müssen, um separate Spalten anstelle der vollständigen Entität abzurufen, können Sie eine solche Abfrage auch in HQL ausdrücken. Tuple der Spaltenwerte werden als Object[] zurückgegeben werden:

Object[] tuple = s.createQuery("SELECT t.a, t.b, t.c FROM SomeEntity t WHERE ...").uniqueResult(); 
+0

Plain HQL ist keine Option, da ich Tabellen einschließen möchte, die nicht von Hibernate gemappt wurden. AFAIK HQL unterstützt nicht das Einfügen von nicht zugeordneten Tabellen, die Hibernate nicht kennen. Bitte korrigieren Sie mich, wenn ich mich hier täusche. – void

0

Wenn Sie eine benutzerdefinierte NamingStrategy (oder einen Standard ein, was das betrifft) verwenden, können Sie die NamingStrategy Klasse verwenden, um Ihre Spaltennamen von Eigenschaftsnamen zu generieren.