2013-11-11 3 views
1

Речь идет о точном сопоставлении вычисляемых столбцов с объектами в Hibernate. У меня сложный SQL-запрос, который создает представление, которое вычисляет столбцы. Простая версия для иллюстрации ниже, где вызов функции сра будет кучей шероховатого SQL ...В Hibernate можно (и как) создать связь с именованным запросом?

CREATE VIEW `Complex` AS 
select 
    `p`.`parentId` AS `complexId`, 
    avg(`t1`.`someColumn`) AS `complexColumn` 
from 
    (`Parent` `p` 
    join `Table1` `t1` ON ((`p`.`parentId` = `t1`.`table1Id`))) 
group by `p`.`parentId` 

Существует класс Субъекта комплекса, который используется в ассоциации обратно Родитель присоединился complexId:

@Entity 
public class Parent { 
... 
@OneToOne 
@PrimaryKeyJoinColumn(name = "complexId") 
private Complex complex; 
... 

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

Вопрос заключается в том, есть ли способ создать эту же ассоциацию, написав сложный запрос без представления, например, как именованный запрос на спящий режим и сохраняя ассоциацию в Parent to Complex как есть?

Причина этого связана с ограничениями мнений в MySql относительно параметров и подзапросов, которых можно было бы избежать, если бы все это можно было представить в запросе, ориентированном на неотображение.

ответ

0

Насколько сложным является ваш SQL? Hibernate имеет @Formula, которые могли бы быть возможность:

public class Parent{ 

@Formula("select avg(xyz) from some_table where parent_id = ?") 
private BigDecimal average; 


} 

Hibernate также поддерживает фильтры, которые описаны как:

как представлений базы данных, но они параметрироваться внутри приложения.

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/filters.html

+0

Проблема с использованием формулы в моем случае, что есть более чем один сложный столбец, и они также зависят от других вычисленных результатов, поэтому использование Формулы-х было много дублированных подразделы запросов, который завершится выполняются как отдельные запросы, а не оптимизированы в один. – HandyManDan

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