I'm working on a Hibernate project, here is an extract of my class:
@Entity
@Table(name = "T_JOB")
@SequenceGenerator(name = "seqJob", sequenceName = "SEQ_JOB", allocationSize = 1)
@Getter
@Setter
public class Job {
@Convert(converter = HibernateBooleenVersCaractere.class)
@Column(name = "STATUT_EXTRACTION")
private boolean statutExtraction;
}
In my database STATUT_EXTRACTION is a CHAR type that's why I used a converter (HibernateBooleenVersCaractere implements AttributeConverter) and it worked perfectly. The boolean statutExtraction was usefull until now because I had only two state (OK = true = 1 in DB, Error = false = 0 in DB). But now I would like to add a state. In order to do that I created a enum state and used enumerated type:
@Entity
@Table(name = "T_JOB")
@SequenceGenerator(name = "seqJob", sequenceName = "SEQ_JOB", allocationSize = 1)
@Getter
@Setter
public class Job {
public enum Statut {
ERROR, OK, LOAD
}
@Column(name = "STATUT_EXTRACTION")
@Enumerated(EnumType.STRING)
private Statut statutExtraction;
}
Here I got an error caused by EnumType different from STATUT_EXTRACTION type in database I guess.
I had a second idea: use a converter as I did for converting boolean to char:
public class HibernateEnumVersChar
implements
AttributeConverter<Statut, Character> {
@Override
public Character convertToDatabaseColumn(final Statut statut) {
if (statut == Statut.OK) {
return '1';
} else if (statut == Statut.LOAD) {
return '2';
} else if (statut == Statut.ERROR) {
return '0';
} else {
return null;
}
}
@Override
public Statut convertToEntityAttribute(final Character dbData) {
if (dbData == '1') {
return Statut.OK;
} else if (dbData == '2') {
return Statut.LOAD;
} else if (dbData == '0') {
return Statut.ERROR;
} else {
return null;
}
}
}
And changed my Job class to:
@Entity
@Table(name = "T_JOB")
@SequenceGenerator(name = "seqJob", sequenceName = "SEQ_JOB", allocationSize = 1)
@Getter
@Setter
public class Job {
public enum Statut {
ERROR, OK, LOAD
}
@Convert(converter = HibernateEnumVersChar.class)
@Column(name = "STATUT_EXTRACTION")
private Statut statutExtraction;
}
And here I have this error:
Error attempting to apply AttributeConverter
Sadly I can't change the database type (char) because I have a lot of data.
Has some one an idea where can my error be (or why not a different way to do what I need to do !) ?