Изменить с:
SELECT u.id as id, u.name as name,
u.prodInfo.ram as ram, u.prodInfo.rom as rom from MobileBrands inner join MobileSpecification
with MobileBrands.id=MobileSpecification.id where MobileBrands.id='1'"
На:
select new com.package.app.MobileDto(mb.id, md.name, ms.rom, ms.ram) FROM MobileBrands mb, MobileSpecification ms WHERE mb.id = 1 and mb.id = ms.id
Как видите, я использую класс MbDto для получения каждой информации.Вы можете создать этот класс в пакете (за пример) com.package.app
с помощью конструктора для полей:
class MbDto {
MbDto(int id, String name, String ram, String rom) {
// constructor will all fields
}
}
Используя его, если вы ожидаете только один результат (пример):
String jpql = "select new com.package.app.MobileDto(mb.id, md.name, ms.rom, ms.ram) FROM MobileBrands mb, MobileSpecification ms WHERE mb.id = 1 and mb.id = ms.id";
Query query = entityManager.createQuery(jpql);
MbDto mbDto = query.getSingleResult();
В более новых версиях Hibernate можно создавать JOIN без отношения, но это не является необходимым для вашей проблемы.
Но обратите внимание, что вы не используете сопоставленные отношения между этими двумя объектами.Если вы попытаетесь это сделать, запрос будет:
select mb FROM MobileBrands mb JOIN mb.productInfo pi WHERE mb.id = 1