2010-05-14 12 views
10

Ho bisogno di essere in grado di effettuare le seguenti operazioni:Personalizzazione Hibernate Criteri - Aggiunta di condizioni per una sinistra unirsi

Select * from Tabella 1 sinistra unirsi Table2 su ID1 = id2 e I1 =?

I criteri di ibernazione non consentono di specificare i1 =? parte.

Il codice esistente sta usando criteri di Hibernate e che sarebbe stato un enorme refactoring per scambiare fuori per HQL

Qualcuno ha qualche consiglio come avrei potuto implementare in modo diverso o un modo per ignorare i criteri di Hibernate? Non mi oppongo a cracking open hibernate e modifiche, ma quando ho iniziato a scavare, sembra che ci siano strati su strati di astrazioni. Non ho mai trovato il punto in cui SQL viene effettivamente generato ...

risposta

0

È possibile utilizzare una modalità di recupero per unire. Si può fare in questo modo:

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

In questo caso, si dovrà prendere il table2OutputList prima di eseguire questa query. Questo article può darti un'idea migliore;

+1

Non sarebbe solo creare questa: SELECT * da Table1 sinistra unirsi Table2 su id1 = id2 DOVE i1 =? Non voglio i1 =? nel mio dove lo voglio come parte dell'espressione "ON" .. –

13

Questo sembra essere quello che mi serve ...

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

cioè

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; 
Problemi correlati