在我的Java程序中.Hibernate Bean类定义了一个类,如..
TimtableVO.java
@Column(name="REPEAT_DAYS")
private WeekdayType repeatDays;//hear WeekdayType is Enum Class
在我的服务类中,我正在使用此TimetableVO.java bean类作为..
这是我的服务类:
public void createEvent(TimetableVO timetableVO) {
WeekdayType weekday = null;
for (String day : timetableVO.getTemp().split(",")) {
weekday = WeekdayType.valueOf(day);
}
timetableVO.setRepeatDays(weekday);
userDAO.createEvent(timetableVO);
}
我的DAO类我正在插入timetableVO对象..
public void createEvent(TimetableVO timetableVO) throws DataAccessException {
entityManager.persist(timetableVO);
}
但是Exception会来......
Exception: Caused by: java.sql.BatchUpdateException: Data truncated for column 'REPEAT_DAYS' at row 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2045)
at coHibernate: insert into EC_TIMETABLE (CLASS_DURATION, COURSE_DURATION, COURSE_FEE, END_DATE, REPEAT_COUNT, REPEAT_DAYS, REPEAT_TYPE, SEARCH_KEY, START_DATE, S_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
m.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1468)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 65 more
Caused by: java.sql.SQLException: Data truncated for column 'REPEAT_DAYS' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
修改 这是我的WeekdayType Enum
public enum WeekdayType {
MONDAY(Calendar.MONDAY), TUESDAY(Calendar.TUESDAY), WEDNESDAY(
Calendar.WEDNESDAY), THURSDAY(Calendar.THURSDAY), FRIDAY(
Calendar.FRIDAY), SATURDAY(Calendar.SATURDAY), SUNDAY(
Calendar.SUNDAY);
private int day;
private WeekdayType(int day) {
this.day = day;
}
public int getDay() {
return day;
}
}
答案 0 :(得分:15)
看起来错误是因为列REPEAT_DAYS
太小而无法保存您通过WeekdayType
枚举传递的值。因此,重新检查底层数据库中该列的定义,并最终增加它的大小。
你也错过了一个注释:
@Column(name="REPEAT_DAYS", length="45")
@Enumerated(EnumType.STRING)
private WeekdayType repeatDays;
注释中的length
应与数据库架构中列的长度匹配。
答案 1 :(得分:14)
这可能是由于您的表架构中的ENUM
没有您尝试插入的所有值。类似的东西:
CREATE TABLE IF NOT EXISTS event (
weekday_type ENUM(
'SUNDAY',
'MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY'
) NOT NULL
);
然后当你执行像
这样的插入时INSERT INTO event (weekday_type) VALUES ('SATURDAY');
使用JDBC会出现类似:Data truncated for column 'weekday_type' at row 1
的异常,因为您忘记在表定义中包含SATURDAY
。插入发生时,值为truncated
为空。
答案 2 :(得分:1)
您的服务器似乎在严格模式下运行,您可能会尝试在NOT NULL列中插入NULL。
另见:What is this error? "Database query failed: Data truncated for column 'column_name' at row 1
答案 3 :(得分:1)
假设你的表是由hibernate自动生成的,你不能像你那样注释Enum类型
@Column(名称=" REPEAT_DAYS&#34)
私人WeekdayType repeatDays;
检查@Enumerated(EnumType.STRING)
注释
答案 4 :(得分:1)
仅当您尝试插入的值太长而无法保留列时,才会出现此问题。
在您的情况下,REPEAT_DAYS
的列定义不足以保存您的值。
你也不能注释像
@Column(name="REPEAT_DAYS")
private WeekdayType repeatDays;
相反,你可以做类似
的事情 @Enumerated(EnumType.STRING)
并定义您的枚举
enum Fruits {
apple,
orange
}