В спящем режиме, как выбрать результаты из одной таблицы при запросе нескольких таблиц - PullRequest
1 голос
/ 20 февраля 2012

Я хочу создать запрос Hibernate, который будет возвращать список фильмов, для которых Джеймс Бонд был сыгран актером, которому сейчас более 60 лет. (не берите в голову глупость этого примера)

Я перепробовал много комбинаций с createQuery, но не могу установить условие для объединения.

Кроме того, еще одна цель заключается в том, чтобы запрос возвращал список вместо списка или списка .

Более конкретно, SQL, который я хотел бы запустить, выглядит следующим образом:

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)

Для этого я предполагаю следующую схему таблицы:

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)
);

Ответы [ 2 ]

1 голос
/ 25 мая 2013

две таблицы

1) CivilDashboard

2) ProjectSubcompChild

from CivilDashboard cd1 
where cd1.civilDbPkid in ( select cd.civilDbPkid as civilDbPkid 
                           from ProjectSubcompChild sc, CivilDashboard cd 
                           where sc.subcompChildPkid = cd.projectSuncompChildPkid)
1 голос
/ 20 февраля 2012

Без добавления отношений запрос HQL может быть таким, как показано ниже. Нам нужно заменить имена таблиц именами Java Bean и именами столбцов на свойства. Также добавьте конструктор в класс Movie, чтобы установить id и name, которые будут давать результат как List<Movie> вместо List<Object[]>.

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 здесь или некоторые примеры здесь для получения дополнительной информации.

...