que decidió implementar un UserType ... es lo más cercano a una configuración de hibernación como puedo conseguir ... aquí está el código ...
package model;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;
public class UpperCaseUserType implements UserType {
private static final int[] TYPES = {Types.VARCHAR};
public int[] sqlTypes() {
return TYPES;
}
public Class returnedClass() {
return String.class;
}
public boolean equals(Object x, Object y) throws HibernateException {
if (x == y) {
return true;
}
if (null == x || null == y) {
return false;
}
return new EqualsBuilder().append(x, y).isEquals();
}
public int hashCode(Object o) throws HibernateException {
return new HashCodeBuilder().append(o).toHashCode();
}
public Object nullSafeGet(ResultSet resultSet, String[] strings, Object object) throws HibernateException, SQLException {
return ((String) Hibernate.STRING.nullSafeGet(resultSet, strings[0])).toUpperCase();
}
public void nullSafeSet(PreparedStatement preparedStatement, Object object, int i) throws HibernateException, SQLException {
String string = ((String) object).toUpperCase();
Hibernate.STRING.nullSafeSet(preparedStatement, string, i);
}
public Object deepCopy(Object o) throws HibernateException {
if (null == o) {
return null;
}
return new String(o.toString());
}
public boolean isMutable() {
return false;
}
public Serializable disassemble(Object o) throws HibernateException {
return (String) o;
}
public Object assemble(Serializable serializable, Object o) throws HibernateException {
return serializable;
}
public Object replace(Object o, Object arg1, Object arg2) throws HibernateException {
return o;
}
}
consideran este elemento de propiedad
<property name="serialNumber" type="model.UpperCaseUserType">
<column name="SERIAL_NUMBER" length="20" not-null="true" unique="true" />
</property>
El razonamiento ... Como hibernación inserta los datos, este tipo convertirá la cadena en mayúsculas. Cuando hibernate selecciona datos, sucede lo mismo. La ventaja que tiene esta clase sobre simplemente cambiar el get/set del bean a mayúsculas es cuando uso un Criteria para seleccionar serialNumber. Hibernate también mayúsculas de mi parámetro, ya que emitirá/aplicará el mismo tipo como se define en la configuración de la tabla.
Por lo tanto, no necesito recordar manualmente mayúsculas todos mis criterios de búsqueda para números de serie ... hibernate se encarga de eso para mí ... ¡eso es exactamente lo que estoy tratando de lograr aquí!
Tengo un JUnit que demuestra todas estas cosas, pero creo que mi respuesta es demasiado grande, ya que es ...
tengo un interceptor que contiene otra "cosas" en las que puedo dejar caer tu idea ... pero no veo escribir mucha lógica para la docena de clases que necesitan que algunos de sus campos estén en mayúsculas. –