我有一个枚举。但是每当我发布它时,我的数据都保存在数据库中作为数字 0,1,2。我不知道这是怎么回事。这就是我向前面展示它的方式:
import org.hibernate.type.StringType;
import org.hibernate.type.EnumType;
SQLQuery query = getCurrentSession().createSQLQuery(sql.toString());
query.addScalar("id", IntegerType.INSTANCE);
query.addScalar("school",EnumType ); // how to call enumtype here?
我的后站控制器:
className.setSchool(SchoolType.FULL); //this is how i'm sending the school value
我的枚举:
public enum SchoolType {
REGULAR("REGULAR"),
FULL("FULL");
private String label;
SchoolType(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public String getName() {
return name();
}
}
在我的恩尼蒂中这样称呼它:
@Column(name="school")
private SchoolType school;
但问题是不是作为reg或full,数据库得到0或1值。如何解决这个问题?而不是获取值,我得到枚举键作为值。
根据休眠文档,您应该添加@Enumerated
注释:
@Enumerated(EnumType.STRING)
@Column(name="school")
private SchoolType school;
如果要将枚举的值存储为枚举值的名称,如java.lang.Enum#name
所示默认情况下,休眠使用ORDINAL
映射类型进行枚举,这就是为什么枚举的值存储为序号的原因。