2012-02-20 19 views
0

60歳以上の俳優がJames Bondを演じたムービーのリストを返すHibernateクエリを作成します。hibernateでは、複数のテーブルのクエリ中に1つのテーブルの結果を選択する方法

私はcreateQueryで多くの組み合わせを試しましたが、結合で条件を設定することはできません。

また、もう一つの目標は、私が代わりに何でも>一覧<文字列>または一覧<のリスト<作品>を返すために、クエリが欲しいです。

は具体的には、私が実行したいSQLは以下のとおりである:HQL、関係を追加することなく、

CREATE TABLE movies(
id   INTEGER   NOT NULL, 
name   NVARCHAR2(100) NOT NULL, 

CONSTRAINT pk_movies PRIMARY KEY (id), 
); 

CREATE TABLE movie_actors (
movie_id INTEGER  NOT NULL, 
actor_id INTEGER  NOT NULL, 
role  NVARCHAR2(200) NOT NULL, 

CONSTRAINT fk_movies_actors_movie_id FOREIGN KEY (movie_id) REFERENCES movies, 
CONSTRAINT fk_movies_actors_actor_id FOREIGN KEY (actor_id) REFERENCES actors 
); 

CREATE TABLE actors (
    id   INTEGER   NOT NULL, 
    firstname NVARCHAR2(50) NOT NULL, 
    lastname NVARCHAR2(50) NOT NULL, 
    age  INTEGER  NOT NULL, 

    CONSTRAINT pk_actors PRIMARY KEY (id) 
); 

答えて

1

SELECT m.* FROM movies m 
INNER JOIN movie_actors ma 
    ON (ma.movie_id = m.id AND ma.role = 'James Bond') 
INNER JOIN actors a 
    ON (a.id = ma.actor_id AND a.age > 60) 

この目的のために、私はこのテーブルのスキーマを想定しますクエリは以下のようになります。テーブル名をJava Beanの名前とカラム名で置き換える必要があります。また、Movieクラスにコンストラクタを追加してidnameに設定し、List<Object[]>の代わりにList<Movie>という結果を得ます。

SELECT new Movie (m.id, m.name) FROM movies m 
INNER JOIN MovieActors ma 
    ON (ma.movieId = m.id AND ma.role = 'James Bond') 
INNER JOIN actors a 
    ON (a.id = ma.actorId AND a.age > 60) 

詳細については、API hereまたはいくつかの例をhere読みます。

1

二つのテーブル

1))

2 CivilDashboard

from CivilDashboard cd1 
where cd1.civilDbPkid in (select cd.civilDbPkid as civilDbPkid 
          from ProjectSubcompChild sc, CivilDashboard cd 
          where sc.subcompChildPkid = cd.projectSuncompChildPkid) 
をProjectSubcompChild
関連する問題