2016-06-21 9 views
0

Ich habe eine Datenbank, die einen bestimmten Objekttyp enthält, wir nennen ihn BaseObject. Mein Projekt hat auch zwei andere Objekte, die viele Felder mit dem BaseObject teilen, die spezifischere Verwendungen haben. Ich möchte, dass der Dao drei Funktionen hat, die drei Hibernate-Abfragen aufrufen: getAllBaseObjects, getAllObjectOnes und getAllObjectTwos. Die Abfragen Ich bin zur Zeit wie folgt aussehen mit:Verwenden von Java-Konstruktoren mit Hibernate-Abfragen

<query name="getAllBaseObjects"> 
    from com.example.BaseObject 
</query> 
<query name="getAllObjectOnes"> 
    select new com.example.ObjectOne(parameter1, parameter2) 
    from com.example.BaseObject 
</query> 
<query name="getAllObjectTwos"> 
    select new com.example.ObjectTwo(parameter1, parameter2, parameter3) 
    from com.example.BaseObject 
</query> 

wo parameter1, parameter2, etc sind Felder in der Baseobject und Konstruktorparameter in den beiden anderen Objekte. Beide Objekte verfügen jedoch auch über Konstruktoren, die eine Instanz des BaseObject übernehmen, und ich frage mich, ob es eine einfache Möglichkeit gibt, diesen Konstruktor in den Hibernate-Abfragen zu verwenden. Ich habe versucht,

<query name="getAllObjectOnes"> 
    select new com.example.ObjectOne(*) 
    from com.example.BaseObject 
</query> 

und

<query name="getAllObjectOnes"> 
    select new com.example.ObjectOne(com.example.BaseObject) 
    from com.example.BaseObject 
</query> 

aber keiner von ihnen schien zu funktionieren.

Gibt es eine Möglichkeit, das zu tun, was ich will, oder muss ich einfach das behalten, was ich gerade habe?

Antwort

1

Versuchen Sie, die Einheit alias verwenden wie:

<query name="getAllObjectOnes"> 
    select new com.example.ObjectOne(b) 
    from com.example.BaseObject b 
</query> 
+0

Diese Funktion in JPQL kann, da JPA 2.0 verwendet werden: https://dzone.com/refcardz/whats-new-jpa-20 –