Me gustaría utilizar la anotación @Where
en Hibernate para eliminar objetos que han sido marcados como "eliminados" por una propiedad booleana en ese objeto. Por ejemplo, el siguiente debe evitar cualquier dirección de borrados de ser cargado por Hibernate:¿Hay alguna manera de evitar que Hibernate corrompa los literales booleanos en @Where annotations?
@OneToMany(mappedBy="contact")
@Where(clause="deleted=FALSE")
private Set<Address> addresses;
Sin embargo cuando se utiliza una cláusula como deleted=FALSE
entonces Hibernate mangle el literal booleano prefijándolo con un nombre de la tabla, lo que provoca que la consulta fallar. Por ejemplo:
select ... from address address0_ where (address0_.deleted=address0_.FALSE) and address0_.contact_id=?
Lo que esperaba es algo así como (address0_.deleted=FALSE)
en lugar de (address0_.deleted=address0_.FALSE)
.
¿Hay alguna manera de especificar la cláusula @Where o configurar Hibernate para que muestre correctamente el valor booleano?
PS. en cuenta que es posible con algunos bases de datos para especificar el valor booleano como una cadena literal de esta manera:
@Where(clause="deleted='FALSE'")
que hará que convierte a (address0_.deleted='FALSE')
que funciona muy bien en, por ejemplo, PostgreSQL. Sin embargo, estoy usando HSQLDB para este proyecto, y HSQLDB no parece ser compatible con literales de cadena booleanos. En HSQL consigo la siguiente excepción cuando se utiliza deleted='FALSE'
:
org.hsqldb.HsqlException: data exception: invalid character value for cast
¿Recordó especificar HSQLDB Dialect en la configuración de hibernación? – Affe
Sí, estoy usando 'org.hibernate.dialect.HSQLDialect' y he verificado que Hibernate realmente lo está usando. – gutch