Настройка критериев гибернации - добавление условий к левому соединению - PullRequest
10 голосов
/ 14 мая 2010

Мне нужно сделать следующее:

Выбрать * из Таблицы1 оставил соединение Table2 на id1 = id2 И i1 =?

Критерии гибернации не позволяют указывать i1 =? часть.

В существующем коде используются критерии гибернации, и это было бы огромным рефактором для замены на HQL

У кого-нибудь есть какие-либо советы, как я мог бы реализовать это по-другому или каким-либо образом переопределить Критерии гибернации? Я не против того, чтобы взламывать спящий режим и модифицировать его, но когда я начал копать его, на слоях абстракций появляются слои. Я никогда не находил точку, где SQL генерируется ...

Ответы [ 2 ]

13 голосов
/ 15 мая 2010

Кажется, это то, что мне нужно ...

http://opensource.atlassian.com/projects/hibernate/browse/HHH-2308

т.е.

public Criteria createAlias(String associationPath, String alias, int joinType, Criterion withClause) throws HibernateException;

public Criteria createCriteria(String associationPath, String alias, int joinType, Criterion withClause) throws HibernateException;
0 голосов
/ 14 мая 2010

Вы можете использовать режим извлечения, чтобы присоединиться. Вы можете сделать это следующим образом:

Criteria criteria = session.createCriteria(Table1.class);
criteria.setFetchMode(table2OutputList, FetchMode, JOIN);
criteria.add(Restrictions.eq("i1", i1Value);
return criteria.list();

В этом случае вам нужно будет извлечь table2OutputList перед выполнением этого запроса. Эта статья может дать вам лучшую идею;

...