0

私は一種のダミーの問題を抱えてい@NamedQueryます。他のテーブルとの結合を作成する必要があります。簡単なことです。

しかし、全体@NamedQueryとして、マップされたオブジェクト/テーブルのみを扱っています。

たとえば、私のオブジェクト/テーブル マップされた車の場合:

@NamedQuery(name = Cars.GET_AVAILABLE_CARS, 
    query = "select c.id from Cars c where c.status = (select d.status from CarStatus d where d.color=red)")

私は使用しようとしています:@SecondaryTablesしかし、今のところ成功していません。

機能しているもう1つのことは、他のテーブルのすべてのものをパラメーターとして与えることですが、これはパフォーマンスが良くなるとは思いません。

お気に入り:

@NamedQuery(name = Cars.GET_AVAILABLE_CARS, query = 
     "select c.id from Cars c where c.status = :" + CarStatusParam)

任意のヒント?

前もって感謝します

4

4 に答える 4

2

名前付きクエリは、API クエリが使用できるすべてのものを使用できるため、明らかにサブクエリを実行できます。JPAのどの実装?

于 2009-12-22T14:12:27.140 に答える
1

私はあなたがこのようなものを持っていると思います:

@Entity
public class Cars{
    private String status;
    //... something else
}

@Entity
public class CarStatus{
    private String status;
    private String color;
    //... something else
}

もしそうなら、これを変更してください

@Entity
public class Cars{
    private CarStatus status;  //<--THIS!!
    //... something else
}

@Entity
public class CarStatus{
    private String color;
    //... something else
}

NamedQuery を次のように更新します。

query ="select c.id from Cars c where c.status.color = 'red'" 

私が間違っていて、テーブルがそのように関連付けられていない場合は、クエリを変更して、サブクエリの代わりに結合を使用する必要があります。このようなもの:

query = "select c.id from Cars c join CarStatus d where c.status = d.status and d.color = 'red'"
于 2012-08-26T04:20:08.760 に答える