2012-12-19 13 views
13

Nella mia classe Java Programma ..Hibernate Bean definire una colonna come ..Come evitare 'Dati troncati per colonna' nel database Mysql Usando java?

TimtableVO.java

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

E nella mia classe di servizio sto usando questa classe bean TimetableVO.java come. .

Questa è la mia classe di servizio:

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

E mia classe DAO io sono io oggetto nserting timetableVO ..

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

Ma Eccezione verrà ..

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: Questo è il mio 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

Mostraci il tuo WeekdayType –

+0

qual è il tipo di dati per la colonna 'REPEAT_DAYS' –

+0

un tipo Enum .... ie., WeekdayType. –

risposta

13

Sembra che l'errore è dovuto al fatto che la colonna REPEAT_DAYS è troppo piccolo per salvare i valori che stai passando attraverso il WeekdayType Enum. Quindi ricontrolla la definizione di quella colonna nel tuo database underling e alla fine aumentane le dimensioni.

Inoltre si sta perdendo un'annotazione:

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

Il length nel l'annotazione deve corrispondere alla lunghezza della colonna nello schema di DB.

+0

In realtà quando mai creare Database in quel momento ho scritto Enum ('MONDAY', 'MARTEDÌ', 'MERCOLEDÌ', 'GIOVEDI', 'VENERDÌ', 'SABATO', 'DOMENICA') proprio come questo solo ... come definisci la sua lunghezza? –

+0

Stai creando lo schema DB tramite Hibernate? – Atropo

+0

NO .. sto usando Phpadmin per Db e rimuovo la proprietà di hbm2ddl.auto –

1

Assumendo le tabelle vengono automaticamente generato da Hibernate, non potete annotare tipo Enum come avete fatto

@Column (name = "REPEAT_DAYS")

repeatDays WeekdayType privati;

check @Enumerated(EnumType.STRING) annotazione

1

Questo problema si verifica solo quando si tenta di inserire un valore che è troppo lungo per una colonna da tenere. Nel tuo caso, la definizione di colonna per REPEAT_DAYS non è sufficiente per contenere il tuo valore. Anche il tuo non può annotare un tipo enum come

@Column(name="REPEAT_DAYS") 

private WeekdayType repeatDays; 

Invece si può fare qualcosa di simile

@Enumerated(EnumType.STRING) e definire l'enum come questo

enum Fruits { 
    apple, 
    orange 
} 
8

Ciò può essere causato da un ENUM nella vostra schema della tabella che non ha tutti i valori che stai cercando di inserire. Qualcosa di simile:

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

Poi, quando si esegue un inserto come

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

utilizzando JDBC si ottiene un'eccezione come: Data truncated for column 'weekday_type' at row 1 perché si è dimenticato di includere SATURDAY nella definizione della tabella. Quando si inserisce l'inserto, il valore diventa truncated a nulla.

Problemi correlati