Настройка критериев гибернации - добавление условий в левое соединение

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

Выберите * из таблицы 1  left join Table2 на id1 = id2 AND i1 =?

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

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

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

Ответ 1

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

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;

Ответ 2

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

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

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