0 Replies Latest reply on Apr 14, 2008 1:59 AM by Terry

    UserType ignored

    Terry Apprentice

      Hi,

      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;
       }
      
      }