使用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行的第'年'列截断数据
原则上,我知道为什么会发生这种情况,因为日期元素大于允许的年份属性,但我不知道如何解决它。
最诚挚的问候, 迈克尔
答案 0 :(得分:0)
您是否试图将整个日期对象写入年份字段?您应该使用getYear
来读取从写入this.year
之前的那一年开始的年份(并且不要忘记添加1900,因为您可能需要整年,而不仅仅是1900年) 。
public void setYear(Date year){
this.year = year.getYear() + 1900;
}
注意:您可能会考虑使用Calendar类,因为大多数Date
方法似乎已被弃用。