JPA/HIBERNATE Обработка объекта, отличного от POJO

У меня три класса. ClassA и ClassB являются классическими объектами POJO, отображаемыми в базе данных. Я хочу, чтобы третий ClassC выполнял конкретный и сложный запрос в базе данных (не сопоставленный с какой-либо таблицей) с использованием HQL. Можно ли добавить аннотацию @Entity в ClassC и сохранить ее только для чтения?

Я просматриваю документацию, чтобы найти способ сопоставить следующий (пример) оператор sql:

select 
 a.id, b.name, c.city
from
 emp a, identity b, address c
where
 a.id = b.id and a.id = c.id

Я не хочу создавать объекты домена и сопоставление для emp, идентификатора и адреса.

Все, что я хочу, это иметь один объект, сопоставленный с выходными данными инструкции sql.

public class Data {
 private int id;
 private String name;
 private String city;
 // ... and other details ...
}

Технически это должна быть работа хранимой процедуры или представления. К сожалению, я не могу изменить базу данных.

Любая помощь/указатели будут оценены.


person user3770624    schedule 30.09.2014    source источник
comment
почему вы хотите создать класс с @Entity только для создания запроса HQL? Вы должны использовать аннотацию Entity только в том случае, если у класса есть таблица сопоставления в БД.   -  person Chaitanya    schedule 01.10.2014
comment
На самом деле я хочу, чтобы classC выполнял некоторые отчеты. И я хочу использовать этот класс, как я использую classA или ClassB с аннотацией @Entity. В этом классе C каждое поле является результатом конкретного запроса HQL, так что мое приложение по-прежнему соответствует шаблону MVC.   -  person user3770624    schedule 03.10.2014


Ответы (1)


Вы можете создать очень сложный SQL-запрос в виде представления и сопоставить с ним свою сущность. По сути, представление — это просто таблица, доступная только для чтения (вы можете сделать ее доступной для чтения и записи в Oracle, но это уже другая история :)), поэтому любое сопоставление гибернации будет нормально работать как объект только для чтения. Я делал это раньше, но несколько лет назад, используя простые файлы Hibernate и hbm. Я никогда не пробовал использовать JPA или аннотации, но не понимаю, почему это не сработает.

person Desorder    schedule 30.09.2014
comment
Спасибо за ваш ответ. Это отличный подход, но я не хочу изменять базу данных, просто выполняю некоторые запросы HQl и сохраняю каждый запрос HQL в поля класса C, и я хочу использовать класс C, как я использую класс @Entity. - person user3770624; 03.10.2014