2016-06-21 5 views
0

私は特定のタイプのオブジェクトを保持するデータベースを持っています。これをBaseObjectと呼びます。私のプロジェクトには、より具体的な用途があるBaseObjectと多くのフィールドを共有する2つのオブジェクトもあります。 DAOに3つの関数、3つのハイバネートクエリ、getAllBaseObjects、getAllObjectOnes、およびgetAllObjectTwosを呼びたいと思います。クエリ私は現在、このような外観を使用しています:JavaコンストラクタをHibernateクエリで使用する

などパラメーター1、パラメーターは、他の二つのオブジェクトでBaseObjectのフィールドとコンストラクタのパラメータです
<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> 

。しかし、両方のオブジェクトには、BaseObjectのインスタンスを取るコンストラクタもあり、そのコンストラクタをhibernateクエリで使用する簡単な方法があるかどうかは疑問でした。私は

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

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

を試してみたが、それらのどちらも動作するように見えました。

私がしたいことをする方法はありますか、現在持っているものをそのまま維持する必要がありますか?

答えて

1

のような実体の別名を使用してみてください:JPA 2.0以降を使用することができますJPQLに

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

この機能を:https://dzone.com/refcardz/whats-new-jpa-20 –

関連する問題