Hibernate中的@Type注释不起作用。我正在使用@SQLInsert

时间:2015-05-19 07:40:29

标签: java hibernate jpa annotations

我在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;

}

0 个答案:

没有答案