我有整数列作为" status"在我的数据库中。
我的枚举课程:
public enum MemberStatus {
PASSIVE(0),ACTIVE(1);
private int value;
private MemberStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
我的实体字段:
@Column(name = "status", nullable = false)
@Enumerated(EnumType.ORDINAL)
private MemberStatus status;
休眠日志:
org.postgresql.util.PSQLException:错误:列"状态"类型为整数,但表达式的类型为 bytea 。 提示:您需要重写或强制转换 expression.bytea
我使用PostgreSQL。如何解决这个问题呢?有什么想法吗?
答案 0 :(得分:4)
我建议您使用转换器。
这是我遇到的最干净的解决方案,因为:
您可以将字段定义为:
@Column(name = "status", nullable = false)
@Convert(converter = MemberStatusEnumConverter.class)
private MemberStatus status;
枚举变得更简单:
public enum MemberStatus {
PASSIVE,
ACTIVE;
}
你的转换器类MemberStatusEnumConverter:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter
public class MemberStatusEnumConverter implements
AttributeConverter<MemberStatus,Integer>{
@Override
public Integer convertToDatabaseColumn(MemberStatus attribute) {
switch (attribute) {
case PASSIVE:
return new Integer(0);
case COUNTYLEVEL:
return new Integer(1);
default:
throw new IllegalArgumentException("Unknown" + attribute);
}
}
@Override
public MemberStatus convertToEntityAttribute(Integer dbData) {
if (dbData == 0){
return MemberStatus.PASSIVE;
} else if (dbData == 1){
return MemberStatus.ACTIVE;
}
else{
throw new IllegalArgumentException("Unknown" + dbData);
}
}
}
This article描述了我为您的示例实施的解决方案。