2014-12-29 3 views
1

Я пытался сделать следующий запрос, я попытался начать, но я не знаю, откуда. Учитывая, что у меня есть сущность для каждой таблицы, как я могу создать этот запрос с помощью Criteria Builder?Критерии JPA 2, Hibernate - кратные объединения

SELECT * 
     FROM TCTIPort as CTIPort   
     INNER JOIN TCTIBoardType AS BoardType      
     ON CTIPort.BoardType = BoardType.BoardType 

     LEFT JOIN TSysPort AS Port    
     ON CTIPort.Switch = Port.Switch AND   
      CTIPort.Machine = Port.Machine AND   
      CTIPort.Port = Port.Channel 

     LEFT JOIN TSysMachineId AS Mach   
     ON Mach.IdApp = Port.IdApp AND   
      Mach.IdTypeApp = Port.IdTypeApp   

     LEFT JOIN TUnPbxGenericValue AS Gen   
     ON CTIPort.Machine = Gen.Machine AND   
      CTIPort.Port = Gen.Port   

     LEFT JOIN TUnPbxGenericName AS GName   
     ON GName.IdGenericName = Gen.IdGenericName   

     LEFT JOIN TSysTypeOfApp STA   
     ON STA.IdTypeOfApp = Port.IdTypeApp 

     LEFT JOIN TSysApplication AS SysApp 
     ON SysApp.IdApp = Port.IdApp 
     AND SysApp.idTypeOfApp = Port.idTypeApp 

     WHERE   
      LTRIM(RTRIM(BoardClass)) IN ('MSI', 'TAP') AND   
      CTIPort.Switch = @Switch AND   
      CTIPort.Machine = @Machine AND   
      (CTIPort.Port = @Port OR @Port IS NULL) AND   
      (Mach.Machine LIKE @NameMachine OR  
      Gen.GenericValue LIKE @NameMachine OR  
      @NameMachine IS NULL)  
     ORDER BY  
      CTIPort.Port 

Должен ли я использовать интерфейс «JOIN» для каждого столбца? Как я добавляю условие «И» к соединениям?

Я искал несколько примеров, но они показывают только простые запросы (withou "and" и без дополнительных таблиц, max 2).

ответ

2

JPA 2.0 не поддерживает «JOIN + ON».

Вам нужно будет сделать что-то вроде:

select p 
from Person p 
left join p.dogs d 
where d.age = 15 and d.sex = 'MALE' 

Если вы хотите добавить критерии в пункте присоединиться к вам нужно будет использовать JPA 2.1

Смежные вопросы