UserType ignored
terryb Apr 14, 2008 1:59 AMHi,
I am trying to implement a usertype for spaced trimmed String. I have done as below but during execution Hibernate just ignores my usertype.
Is there something else needed for my StringTrimmed usertype to be used instead of the default String?
----- UserType ----------------------
package au.edu.tisc.usertype;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;
/**
* String user type with left and right spaces trimmed.
*/
public class StringTrimmed implements UserType {
public int[] sqlTypes() {
return new int[] { Hibernate.STRING.sqlType() };
}
public Class returnedClass() {
return String.class;
}
public boolean isMutable() {
return false;
}
public Object deepCopy(Object value) {
String stringValue = (String) value;
String copy = new String(stringValue);
return copy;
}
public Serializable disassemble(Object value) {
return (Serializable) value;
}
public Object assemble(Serializable cached, Object owner) {
return cached;
}
public Object replace(Object original, Object target, Object owner) {
String stringValue = (String) original;
String copy = new String(stringValue);
return copy;
}
public boolean equals(Object x, Object y) {
if (x == y) {
return true;
}
if (x == null || y == null) {
return false;
}
return x.equals(y);
}
public int hashCode(Object x) {
return x.hashCode();
}
public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner) throws SQLException {
String stringValue = resultSet.getString(names[0]);
if (resultSet.wasNull()) {
return null;
}
return stringValue;
}
public void nullSafeSet(PreparedStatement statement, Object value, int index) throws HibernateException, SQLException {
if (value == null) {
statement.setNull(index, Hibernate.STRING.sqlType());
} else {
String untrimmedValue = (String) value;
statement.setString(index, untrimmedValue.trim());
}
}
}
-----------------------------------------------------------
----------------- Entity class using usertype -------------
@Entity
@Table(name = "Client")
@TypeDef(name="StringTrimmed", typeClass=au.edu.tisc.usertype.StringTrimmed.class)
public class Client implements java.io.Serializable {
private String id;
...
@Type(type = "StringTrimmed")
private String notes;
...
@Column(name = "Notes", length = 250)
@Length(max = 250)
public String getNotes() {
return this.notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
}