2

Entity Framework のバックグラウンドから来て、ORM の結果を、完全なバックエンド モデルのデータのサブセットを含むクラスにキャストできます。

私は通常、次のようなものを返すJAX-RS RESTサービスを持っています

MyEntity result = em.createQuery(select e from MyEntity e ... blah blah blah).

私はこれを行うことができることを知っています:

Object result = em.createQuery(select e.Title, e.Version, e.Date from MyEntity e... blah blah blah).

しかし、結果を別のクラスにキャストするか、JSON を返すときに名前が付けられるように createquery のフィールドに名前を付けることができますか?

たとえば、.Net Land では、次のようなことができます....

(select new {Title = e.Title, Version = e.Version}) 

これを別の型にキャストします。typedquery とキャストを使用してみましたが、「型 X は戻り値の型 Y と互換性がありません」という型のエラーが発生します。

私の目標は、特定のシナリオで使用するために、情報の特定のサブセット (ビュー モデル/DTO) を返すことです。

たとえば、私のモデルは巨大で、毎回大量のデータを返したくありません。

4

1 に答える 1

8

NEWはい、JPA コンストラクター式、つまり次のキーワードを使用して、非エンティティ型を作成できます 。

List<DTO> dtos = em.createQuery("SELECT NEW com.example.DTO( o.title, o.version) FROM Entity o").getResultList();

DTO には、関連するすべてのフィールドを持つコンストラクターが必要です。

キャストの必要はありません。

于 2013-02-13T15:06:44.373 に答える