我在hibernate中有一个带有Calendar类型字段的模型类。相应的DB列是timestampwithtimezone(6)。我正在使用自定义@SQLInsert。该课程如下所示 -
@Entity
@SQLInsert("insert into EMPLOYEE (STARTDATETIME) values (TO_TIMESTAMP_TZ(?,'DD- MM-YY HH.MI.SS PM TZHTZM '))" )
@Table(
name = "EMPLOYEE",
)
public class Employee {
@Column(
name = "STARTDATETIME",
nullable = false
)
@Type(type = "com.myPackage.TimeStampTypeImpl")
private Calendar startDateTime;
public Calendar getStartDateTime() {
return this.startDateTime;
}
public void setStartDateTime(Calendar startDateTime) {
this.startDateTime = startDateTime;
}
}
在实现Usertype的类TimeStampTypeImpl中,正在执行必要的Calendar转换为合适的字符串,该字符串应该在insertSafeSet方法的insert参数的输入参数中给出。 但我得到的问题是 - 似乎自定义类TimestampImpl不工作 - nullSafeSet方法没有被调用。因此插入查询失败。
我使用的图书馆是 -
冬眠-公地注解-4.0.1.Final-红帽-2.jar
冬眠核-4.2.7.SP1-红帽-3.jar
冬眠-JPA-2.0-API-1.0.1.Final-红帽-2.jar
TimeStampTypeImpl中的代码:
public void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException {
Calendar cal = (Calendar) value;
log.debug("TIMESTAMPIMPL2");
tring dateTime = getOracleFormattedTimeWithZone(cal);
log.debug("TIMESTAMPIMPL3");
st.setString(index, dateTime);
}
private static String getOracleFormattedTimeWithZone(Calendar timeWithZone) {
String dateFormat = "dd-MM-yy hh.mm.ss a Z";
DateFormat df = new SimpleDateFormat(dateFormat);
String dateTime = df.format(timeWithZone.getTime());
System.out.println("()()()()()()()()()"+dateTime);
return dateTime;
}