2009-07-07 8 views
5

Diciamo che ho questa entità (per Hibernate):Sospensione: le entità di query che contengono un elemento specificato in un oggetto CollectionOfElements?

@Entity 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 

    @CollectionOfElements 
    @IndexColumn("phones_index") 
    Set<String> phones; 
} 

Per esempio, io voglio ottenere istanze di persona in cui i loro telefoni contengono "555-1234". Come posso fare una query su questo? Sto cercando qualcosa di simile a:

session.createCriteria(Person.class)./*something*/.add(Restrictions./*something*/"555-1234").list(); 

risposta

9

Hi è possibile prova questo

String phone = "555-1234"; 
Person person= (Person) session.createQuery("from Person p join p.phones pl where pl = :phone").setString("phone", phone).uniqueResult(); 
-1

Penso che si desidera il metodo di Hibernate Restrictions.in(), che prende un nome di proprietà come primo argomento, e sia una matrice o Raccolta di oggetti come il secondo.

Consulta anche: The Javadoc

Edit: Rileggendo la tua domanda, penso che si può utilizzare uno qualsiasi dei relativi Restrictions metodi, in particolare, eq:

session.createCriteria(Person.class).add(Restrictions.eq("phones", "555-1234")).list(); 
+0

Chiunque l'ha provato? – whiskeysierra

+0

@Willi: Non funziona per me, la risposta accettata però. Inoltre c'è un problema aperto nel sistema di bugracking di ibernazione a riguardo: http://opensource.atlassian.com/projects/hibernate/browse/HHH-869 –

+0

Non funziona, vedere http://opensource.atlassian.com/ progetti/hibernate/browse/HHH-869 –

Problemi correlati