¿cómo puedo establecer un parámetro de Hibernación en "nulo"? Ejemplo:Hibernate: ¿Cómo establecer el valor del parámetro de consulta NULL con HQL?
Query query = getSession().createQuery("from CountryDTO c where c.status = :status and c.type =:type")
.setParameter("status", status, Hibernate.STRING)
.setParameter("type", type, Hibernate.STRING);
En mi caso, la cadena de estado puede ser nula. He depurado esto e hibernate luego genera una cadena/consulta SQL como esta ... status = null
... Sin embargo, esto no funciona en MYSQL, ya que la declaración SQL correcta debe ser "status is null
" (Mysql no entiende status = null y evalúa a false de manera que no hay registros jamás serán devueltos por la consulta, de acuerdo con la documentación de MySQL que he leído ...)
Mis preguntas:
por qué doesnt
Hibernate
traducir una cadena nula correctamente a "es nulo" (y más bien y crea erróneamente "= nulo")?¿Cuál es la mejor manera de volver a escribir esta consulta para que sea nula? Con nullsafe quiero decir que en el caso de que el "estado" String sea nulo de lo que debería crear un "es nulo"?
Muchas gracias! Tim
Para aquellos interesados en una solución, creo que la API de Criteria es una manera de hacerlo. Pero todavía no estoy muy convencido ya que carga el código horriblemente y usar HQL sería mucho más limpio.Tal vez la solución real es implementar su propio tipo Hibernate (he implementado uno para ENUM pero estos tipos auto implementados, al menos los básicos tienen grandes desventajas sobre el bulid en tipos de hibernación en Querying with HQL (a menos que también extienda el HQL) analizador?) lo que hace que este sea un gran proyecto y requiera mucho conocimiento de Hibernate ... (continúa en la parte 2) – tim
Parte2: Quizás el más fácil (por otro lado, NO es una Buena Práctica) está editando directamente la clase Hibernate String Type sí mismo y agregue la lógica que falta. Esto debería ser solo una línea de vista para verificar valores de Cadena nulos y actuar en consecuencia ... – tim
Acabo de tropezar con esto también ... Dios mío, esto es muerte de cerebros. –