I created a UserType (see below) to handle the situation in our mySQL database, where we store zero dates as 0000-00-00 00:00:00.
When I try and save my object with a null value for dispDT (see below), it throws this exception: "javax.persistence.PersistenceException: org.hibernate.PropertyValueException: the not-null property refers to a null value or a transition: myEntity. DispDtt "
By setting a breakpoint in each method in MySQLTimeStampUserType, I see that it calls the deepCopy method and never calls the nullSafeSet method. I thought the whole point of the nuyllSafeSet method is to allow me to manipulate the value before storing it. What am I doing wrong?
Entity Annotations
@Basic(optional = false) @Column(name = "disp_dt") @Type(type = "mypackage.MySQLTimeStampUserType") // @Temporal(TemporalType.TIMESTAMP) private Date dispDt;
Custom class type
public class MySQLTimeStampUserType implements UserType { private static final int[] SQL_TYPES = {Types.TIMESTAMP}; public int[] sqlTypes() { return SQL_TYPES; } public Class returnedClass() { return Date.class; } public boolean equals(Object x, Object y) throws HibernateException { if (x == y) { return true; } else if (x == null || y == null) { return false; } else { return x.equals(y); } } public int hashCode(Object arg0) throws HibernateException { throw new UnsupportedOperationException("Not supported yet."); } public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner) throws HibernateException, SQLException {
java hibernate usertype
Preston
source share