Есть ли способы иметь один запрос на выборку вместо нескольких запросов на выборку в Hibernate? - PullRequest
0 голосов
/ 17 августа 2011

Я использую Spring + Hibernate (HQL).
У меня есть требование, когда мне нужно запустить запрос select несколько раз, так как параметры каждый раз разные.
Например

SELECT * FROM MY_TABLE WHERE name=? and age=?
входы будут

"John", 30
"Nick", 29
"Joe", 32

и т. Д. Их может быть любое количество.

Это приводит к n количеству запросов, где n - количество входных данных

Ex:

SELECT * FROM  MY_TABLE  WHERE name=John and age=30
SELECT * FROM  MY_TABLE  WHERE name=Nick and age=29 
SELECT * FROM  MY_TABLE  WHERE name=Joe and age=32

есть ли способ в спящем режиме, где у меня может быть только один запрос для этого вместо нескольких запросов выбора
Пример:
SELECT * FROM MY_TABLE WHERE (name=John and age=30) or (name=Nick and age=29) or (name=Joe and age=32)

Или любым другим оптимизированным способом?

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Если вы используете запрос Criteria, вы можете использовать Disjunction:

Disjunction d = Restrictions.disjunction(); 
for(param p : params) {
   Conjunction c = Restrictions.conjunction();
   c.add(Restrictions.eq("name", p.getName()));
   c.add(Restrictions.eq("age", p.getAge()));
   d.add(c);    
}
criteria.add(d);
0 голосов
/ 17 августа 2011

вы могли бы использовать UNION, хотя, насколько я знаю, UNION не поддерживался в HQL.Если это ограничение остается в силе, вам, возможно, придется использовать нативный SQL, чтобы использовать это

SELECT * FROM  MY_TABLE  WHERE name=John and age=30
UNION
SELECT * FROM  MY_TABLE  WHERE name=Nick and age=29 
UNION
SELECT * FROM  MY_TABLE  WHERE name=Joe and age=32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...