2011-03-01 13 views
5

Todavía soy bastante nuevo para hibernar y parece que no puedo encontrar cómo hacerlo, tal vez estoy buscando una terminología incorrecta. Estoy pasando un valor proporcionado por el usuario desde mi UI, en el ejemplo a continuación esta es la variable testvalue. Es para hacer una búsqueda, de modo que si lo que el usuario ingresa está contenido en cualquier parte de una entrada e.filenametxt Quiero que devuelva esa fila como una coincidencia.Java Hibernate/Spring, haciendo una consulta de coincidencia parcial ("contiene")?

Por ejemplo, testvalue = "file1", yo quiero que sea capaz de encontrar una fila donde e.filenametxt = "file1/someotherinfo/"

String SQL_QUERY = "from EdrmTest e where e.filenametxt is :foreignkeytest "; 
Query query = session.createQuery(SQL_QUERY); 
query.setParameter("foreignkeytest", testvalue); 

se aprecia ningún consejo.

+0

Como complemento a las respuestas me gustaría mencionar que hay algo llamado búsqueda de hibernación que usa lucene debajo de las cubiertas. Resuelve el mismo problema, pero es mucho más poderoso y escalable. – Federico

Respuesta

7
String SQL_QUERY = "from EdrmTest e where e.filenametxt LIKE :foreignkeytest "; 
Query query = session.createQuery(SQL_QUERY); 
query.setParameter("foreignkeytest", "%" + testvalue + "%");\ 

Probar eso. Los comodines deben estar en la variable (por alguna razón).

+0

+1 gracias por señalar que el "%" debe estar en el parámetro, esto no está claro en ninguno de los documentos que he leído y no pude hacerlo funcionar. –

6

También puede usar the Criteria API para establecer este tipo de cláusulas programáticamente; a veces puede ser mucho más agradable manejar consultas con esta API en comparación con una consulta basada en HQL/String si necesita agregar cualquier tipo de lógica dinámica (es decir, incluir ciertas cláusulas basadas en una condición).

Criteria crit = session.createCriteria(EdrmTest.class); //the persistent class goes here 
crit.add(Restrictions.like("filenametxt", testvalue + "%")); 
//execute the query: 
List<EdrmTest> results = (List<EdrmTest>) crit.list(); 
+0

También funciona, menos textual, más programático, pero definitivamente funciona. – Zoidberg

+0

genial, gracias por la información – Rick

+1

Si no desea distinguir entre mayúsculas y minúsculas y desea hacer coincidir cualquier lugar, consulte esta publicación http://stackoverflow.com/questions/120588/case-insensitive-search-using-hibernate –

Cuestiones relacionadas