我正在研究一个 Hibernate 项目,这是我的课程的摘录:
@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;
}
在我的数据库中,STATUT_EXTRACTION 是一个 CHAR 类型,这就是我使用转换器(HibernateBooleenVersCaractere 实现 AttributeConverter)的原因,它工作得很好。直到现在,布尔 statutExtraction 很有用,因为我只有两个状态(DB 中的 OK = true = 1,DB 中的 Error = false = 0)。但现在我想添加一个状态。为此,我创建了一个枚举状态并使用了枚举类型:
@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;
}
在这里,我猜到了由 EnumType 与数据库中的 STATUT_EXTRACTION 类型不同引起的错误。
我有第二个想法:使用转换器,就像我将布尔值转换为字符一样:
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;
}
}
}
并将我的工作课程更改为:
@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;
}
在这里我有这个错误:
尝试应用 AttributeConverter 时出错
遗憾的是我无法更改数据库类型(char),因为我有很多数据。
有人知道我的错误在哪里(或者为什么不以不同的方式来做我需要做的事情!)?