2013-01-12 6 views
8

Ich habe eine Anforderung zum Abrufen ausgewählter Zeilen aus der Oracle-Datenbank basierend auf ids als Array geliefert, so etwas wie die SELECT ... FROM table_name WHERE id IN() Abfrage.Wie verwende ich die Methode setParameterList() in Hibernate?

Bei meinen Versuchen versuche ich die Methode org.hibernate.setParameterList(String name, Object[] values) in meinem DAO wie folgt zu verwenden.

@Service 
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW) 
public final class ProductImageDAO implements ProductImageService { 

    @SuppressWarnings("unchecked") 
    public List<Object[]> getFileName(String[] list) { 
     return sessionFactory 
       .getCurrentSession() 
       .createQuery("SELECT prodImageId, prodImage FROM ProductImage WHERE prodImageId=:list") 
       .setParameterList("list", list).list(); 
    } 
} 

Die Parameter des Typs String[] in der angegebenen Methode wird von der jeweiligen Feder Controller-Klasse versorgt.

Die folgende Ausnahme wird ausgelöst.

org.hibernate.hql.ast.QuerySyntaxException: unerwartetes Token: nahe Zeile 1, Spalte 78 [select prodImageId, prodImage aus model.ProductImage wo prodImageId =: id0_,: id1_,: id2_,: id3_, : id4_,: id5_]

Was ist der Weg, um die ausgewählten Zeilen auf Liste der ids mit Hibernate basiert abzurufen?

Antwort

20
String queryString = "select acc from cgix.trust.domain.PtbnAccount as acc where acc.accountId IN (:accountdIds)"; 
Query query = session.createQuery (queryString); 
query.setParameterList("accountIds", accountFilter); 

accountFilter Angenommen ist ein List Objekt. Beachten Sie, dass Sie keine leeren Listen übergeben sollten, da dies zu folgendem SQL führen würde (was nicht funktionieren wird): ... WHERE xyz IN() ... (beachten Sie die leere In-Klausel).

+0

Ja meine HQL Syntax falsch war . Das Ersetzen von 'where prodImageId =: id' mit' where prodImageId in (: id) 'hat funktioniert. – Tiny

+6

Die letzte Abfrage sollte 'query.setParameterList (" accountIds ", accountFilter) sein;', nein? –

+0

Fukuzawa hat Recht, sollte query.setParameterList ("accountIds", accountFilter) sein, bitte aktualisieren Sie die Antwort – UCJava

3

Das Problem, das die meisten Menschen hier ist, dass sie nach wie vor verwenden möchten,

query.setParameter("accountIds", accountFilter); 

statt

query.setParameterList("accountIds", accountFilter); 

Verwendung setParameterList(), wenn sie mit Listen zu tun

+0

, wie String [] -Array als Abfrageparameter festgelegt wird – priyadarshini

Verwandte Themen