Hibernate将Java日期转换为MySQL年份

时间:2014-12-04 13:55:29

标签: java mysql hibernate

使用Java Hibernate存储 MySQL 属性 YEAR 的列时出现问题。

MySQL表:

CREATE TABLE DateTest (
  id INT NOT NULL AUTO_INCREMENT,   
  year YEAR(4),
  PRIMARY KEY(id)
) ENGINE = InnoDB;

...

Java Access Class

public class DateTest implements java.io.Serializable {

     private Integer id;
     private Date year;

    public DateTest() {
    }

    public DateTest(Date year) {
        this.year = year;
    }


    public Integer getId(){
        return this.id;
    }

    public void setId(Integer id){
        this.id = id;
    }

    public Date getYear(){
        return this.year;
    }

    public void setYear(Date year){
        this.year = year;
    }

}

保存记录的Java代码

DateTestDao tcd = new DateTestDao();
Date dd = new Date();

DateTest dt = new DateTest();
tc.setYear(dd);
tcd.saveRecord(dt);

当我想使用Hibernates session.save 时,会发生以下错误:

错误org.hibernate.util.JDBCExceptionReporter - 第1行的第'年'列截断数据

原则上,我知道为什么会发生这种情况,因为日期元素大于允许的年份属性,但我不知道如何解决它。

最诚挚的问候, 迈克尔

1 个答案:

答案 0 :(得分:0)

您是否试图将整个日期对象写入年份字段?您应该使用getYear来读取从写入this.year之前的那一年开始的年份(并且不要忘记添加1900,因为您可能需要整年,而不仅仅是1900年) 。

public void setYear(Date year){
    this.year = year.getYear() + 1900;
}

注意:您可能会考虑使用Calendar类,因为大多数Date方法似乎已被弃用。