2010-05-14 6 views
10

Ich muss folgendes tun können:Customizing Hibernate Criteria - Hinzufügen von Bedingungen zu einem LEFT JOIN

Select * von Table1 links Table2 kommen auf id1 = ID2 und i1 =?

Hibernate-Kriterien können nicht angegeben werden, um die i1 =? Teil.

Der bestehende Code wird mit Hibernate Kriterien und es wäre ein großer refactor auslagern für HQL

Hat jemand irgendwelche Tipps sein, wie ich dies anders oder irgendeine Art und Weise implementieren könnten die Hibernate Kriterien außer Kraft zu setzen? Ich bin nicht dagegen, den Winterschlaf zu öffnen und zu modifizieren, aber als ich anfing zu graben, scheint es Schichten auf Schichten von Abstraktionen zu geben. Ich habe nie den Punkt gefunden, an dem SQL tatsächlich generiert wird ...

Antwort

0

Sie können einen Fetch-Modus zum Verbinden verwenden. Sie können es tun, indem dies zu tun:

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

In diesem Fall erhalten Sie die table2OutputList vor dem Ausführen dieser Abfrage holen müssen. Diese article kann Ihnen eine bessere Idee geben;

+1

nicht schaffen würde nur diese: SELECT * von Table1 links Table2 auf id1 beitreten = id2 WO i1 =? Ich will nicht i1 =? in meinem wo auf will es als Teil des "ON" Ausdruck .. –

13

Dies scheint zu sein, was ich brauche ...

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

dh

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;