如何避免';列'的数据被截断;在Mysql数据库中使用java?

如何避免';列'的数据被截断;在Mysql数据库中使用java?,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,在我的Java程序中..HibernateBean类定义一列,如 TimtableVO.java @Column(name="REPEAT_DAYS") private WeekdayType repeatDays;//hear WeekdayType is Enum Class 在我的服务类中,我使用这个TimetableVO.javabean类作为 这是我的服务课: public void createEvent(TimetableVO timetableVO) { Weekday

在我的Java程序中..HibernateBean类定义一列,如

TimtableVO.java

@Column(name="REPEAT_DAYS")
private WeekdayType repeatDays;//hear WeekdayType is Enum Class
在我的服务类中,我使用这个TimetableVO.javabean类作为

这是我的服务课:

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: 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)
编辑: 这是我的工作日类型枚举

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;
    }
}

您的服务器似乎在严格模式下运行,您可以尝试在NOTNULL列中插入NULL


另请参见此处:

错误似乎是由于列
REPEAT_DAYS
太小,无法保存通过
WeekdayType
枚举传递的值。因此,重新检查下划线数据库中该列的定义,并最终增加其大小

此外,您还缺少一个注释:

 @Column(name="REPEAT_DAYS", length="45")
 @Enumerated(EnumType.STRING)
 private WeekdayType repeatDays;

注释中的
长度
应与数据库架构中列的长度相匹配。

假设您的表是由hibernate自动生成的,您不能像以前那样注释枚举类型

@列(name=“REPEAT\u DAYS”)

私人工作日类型


检查
@Enumerated(EnumType.STRING)
注释仅当您试图插入一个太长而无法容纳列的值时,才会出现此问题。 在您的情况下,
REPEAT_DAYS
的列定义不足以保存您的值。 此外,您不能像这样注释枚举类型

@Column(name="REPEAT_DAYS")

private WeekdayType repeatDays;
相反,你可以这样做

@Enumerated(EnumType.STRING)
并按如下方式定义枚举

enum Fruits {
  apple,
  orange
}

这可能是由于表架构中的
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,您会得到一个异常,如:
第1行“weekday\u type”列的数据被截断,因为您忘记在表定义中包含
SATURDAY
。插入时,值被截断为空。

显示您的工作日类型列的数据类型是什么
重复天数
枚举类型。。。。实际上,当我在那个时候创建数据库时,我写了Enum('周一','周二','周三','周四','周五','周六','周日'),就像这样…如何定义它的长度?你是通过Hibernate创建数据库模式吗?不是。。我正在为Db使用Phpadmin并删除hbm2ddl.autothis的属性!我也有同样的问题,当我检查我的表定义时,有一个打字错误
throusday
,而不是
throuddy