2012-02-10 12 views
0

フィールドがテーブルに固有ではなくクエリに関連するエンティティを作成しようとしています。たとえば、次のようにテーブルに関連付けられていないHibernateエンティティを作成します。

@Entity 
class MyEntity{ 
    @column("bookTitle ") 
    private String bookTitle; 

    @Column("rating ") 
    private Double rating; 

    @Column("sum") 
    private Integer sum; 
} 

これらのフィールドは任意のテーブルの列ではありませんが、まだ私が欲しい:bookTitleで、評価AS o2.rate、合計AS o3.totalNumber AS SELECT o1.bookName ...

のEntityManager .createQuery(my above query、MyEntity.class)は、MyEntity型のクラスを期待どおりに返します。

残念ながら、Hibernateは「列が見つかりません」という文句を言います。 EclipseLink、またはToplinkではうまくいきます。さらに、私の意見では、エンティティは特定のテーブルに関連付けるべきではなく、無作為に収集される一連の列を保持する必要があります。

答えて

0

あなたは休止状態/ JPAを使用して@Entityで選択をマッピングすることはできませんが、あなたがこれを行うことができます:

public class MyEntity{ 

    private String bookTitle; 
    private Double rating; 
    private Integer sum; 

    public MyEntity(String bookTitle, Double rating, Integer sum) { 
     this.bookTitle = bookTitle; 
     this.sum = rating; 
     this.sum = sum; 
    } 
} 

その後、あなたは以下のHQLを使用します。

select new package.MyEntity(o1.bookName, o2.rate, o3.totalNumber) from something where 

別の解決策を作成することです@Entityをビューにマップし、ビューにマップします。

+0

ありがとう、私はこの解決策を認識していますが、それはエレガントではありません –

+0

ところで、あなたのクエリがそれらを選択している限り、テーブルに常駐していない休止状態のエンティティ内に新しい列を宣言することは可能です。言い換えれば、エンティティフィールドをマップし、選択にこのフィールドが含まれていない場合にのみ、hibernateは文句を言います –

関連する問題