Estoy utilizando Spring Data JPA y estoy tratando de agregar una consulta a mi repositorio. Yo estaba tratando de construir simplemente la consulta sin la anotación @Query como:Spring JPA Data "O" consulta
List<Item> findByTypeAndStateOrStateAndStartDateBetween(Type type, State s, State s2, Date startDate, Date endDate);
Mi objetivo es construir una consulta de este modo:
select * from item where type = ? and (state = ? or state = ?) and start_date between ? and ?
Mi problema es con la cláusula OR. ¿Hay alguna manera de asegurarse de que haya corchetes? De lo contrario, la lógica no es correcta. Los ejemplos que encontré aquí: http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.M1/reference/html/#jpa.query-methods.query-creation
no tienen ninguna o cláusula con más de 1 columna.
Además, hay una manera de pasar en una lista de objetos. Por ejemplo, si quisiera encontrar elementos con 3 estados, tendría que crear otra consulta, que no se escala muy bien.
Gracias.
EDIT:
me di cuenta de cómo pasar de la lista de estados que utilizan la notación @Query. Lo hace así:
@Query("FROM item i WHERE i.type = ?1 AND i.state IN (?2)")
Luego puede simplemente pasar una lista al método como el segundo parámetro. Todavía no sé cómo hacer esto sin usar la notación @Query.
Creo que esta es la razón por la primavera de datos le permite especificar la consulta, sólo puede ir tan lejos en la determinación de lo que quiere de nombre de método solo. Está bien para consultas simples, pero una vez que aumenta la complejidad, es mejor que le diga exactamente lo que quiere en lugar de adivinarlo. – Thevenin
Además, @Query es mucho más fácil de leer que un nombre de método largo. – skel625
Gracias, esta es la conclusión a la que llegué también. Solo usa un @Query. – devo