2012-12-19 13 views
13

W mojej klasie Program Java ..Hibernate Bean zdefiniować jedną kolumnę jak ..Jak uniknąć "Dane obcięte dla kolumny" w bazie danych Mysql Korzystanie z java?

TimtableVO.java

@Column(name="REPEAT_DAYS") 
private WeekdayType repeatDays;//hear WeekdayType is Enum Class 

I w moim klasy usługi Używam tego TimetableVO.java fasoli jako klasę. .

to moja klasa usług:

public void createEvent(TimetableVO timetableVO) { 
    WeekdayType weekday = null; 
    for (String day : timetableVO.getTemp().split(",")) { 
     weekday = WeekdayType.valueOf(day); 
    } 
    timetableVO.setRepeatDays(weekday); 
    userDAO.createEvent(timetableVO); 
} 

A moja klasa DAO jestem ja Obiekt nserting timetableVO ..

public void createEvent(TimetableVO timetableVO) throws DataAccessException { 
    entityManager.persist(timetableVO); 
} 

Ale Wyjątek przyjdzie ..

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) 

EDIT: To mój 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

Pokaż nam swój WeekdayType –

+0

jaki jest typ danych dla kolumny 'REPEAT_DAYS' –

+0

typu Enum .... ie., WeekdayType. –

Odpowiedz

13

Wygląda na to, że błąd wynika z faktu, że kolumna REPEAT_DAYS jest zbyt mała, aby zapisać wartości jesteś przechodzącą przez WeekdayType Enum. Sprawdź ponownie definicję tej kolumny w swojej bazie danych i ostatecznie zwiększ jej rozmiar.

także tracisz adnotację:

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

length w adnotacji powinien dopasować długość kolumny w schemacie DB.

+0

Właściwie gdy kiedykolwiek stworzyć bazę danych, w tym czasie pisałem Enum („poniedziałek”, „wtorek”, „środa”, „czwartek”, „piątek”, „sobota”, „Niedzieli”), podobnie jak to tylko ... jak zdefiniować jego długość? –

+0

Czy tworzysz schemat DB przez Hibernate? – Atropo

+0

NIE .. Używam Phpadmin dla Db i usuwam właściwość hbm2ddl.auto –

1

Zakładając, że tabele są automatycznie generowane przez hibernacji, nie można opisywać typu Enum jak ty

@Column (name = "REPEAT_DAYS")

prywatne repeatDays WeekdayType;

Sprawdź @Enumerated(EnumType.STRING) adnotacja

1

Ten problem występuje tylko wtedy, gdy próbujesz wstawić wartość, która jest zbyt długi dla kolumna trzymać. W twoim przypadku definicja kolumny dla REPEAT_DAYS nie wystarczy, aby utrzymać twoją wartość. również swoje nie można opisywać typ enum jak

@Column(name="REPEAT_DAYS") 

private WeekdayType repeatDays; 

Zamiast tego można zrobić coś jak

@Enumerated(EnumType.STRING) i zdefiniować enum jak ten

enum Fruits { 
    apple, 
    orange 
} 
8

Może to być spowodowane przez ENUM w swojej schemat tabeli, który nie ma wszystkich wartości, które próbujesz wstawić. Coś jak:

CREATE TABLE IF NOT EXISTS event (
    weekday_type ENUM(
     'SUNDAY', 
     'MONDAY', 
     'TUESDAY', 
     'WEDNESDAY', 
     'THURSDAY', 
     'FRIDAY' 
    ) NOT NULL 
); 

Wtedy, kiedy wykonać wkładkę jak

INSERT INTO event (weekday_type) VALUES ('SATURDAY'); 

użyciu JDBC dostaniesz wyjątek jak: Data truncated for column 'weekday_type' at row 1 bo zapomniał włączyć SATURDAY w definicji tabeli. Po wstawieniu wstawki wartość zostaje zmniejszona do wartości.

Powiązane problemy