Hibernate 实体映射:将 VARCHAR 检索为布尔值
Hibernate entities mapping: Retrieve VARCHAR as boolean
我的数据库中有一个 table INCIDENCIA
,它有一个 VARCHAR 列 VISIBLE
,有两个可能的值:Y
或 N
匹配 true
或 false
.
我把它映射到这个实体中:
@Entity
public class Incidencia {
private String visible;
//other fields
@Basic
@Column(name = "VISIBLE")
public String getVisible() {
return visible;
}
public void setVisible(String visible) {
this.visible = visible;
}
}
这个字段是一个字符串,因为数据库中的列是一个 VARCHAR,但是我想通过 Y/N 反序列化将其检索为 java.lang.Boolean。
有没有办法通过 Hibernate 注释来做到这一点?
谢谢。
您可以创建自己的映射类型。像这样:
package es.buena.jamon.type;
public class SpanishBoolean extends AbstractSingleColumnStandardBasicType<Boolean>
implements PrimitiveType<Boolean>, DiscriminatorType<Boolean>
{
private static final long serialVersionUID = 1L;
public static final SpanishBoolean INSTANCE = new SpanishBoolean();
public SpanishBoolean() {
super( CharTypeDescriptor.INSTANCE, new BooleanTypeDescriptor('S', 'N') );
}
@Override
public String getName() {
return "si_no";
}
@Override
public Class getPrimitiveClass() {
return boolean.class;
}
@Override
public Boolean stringToObject(String xml) throws Exception {
return fromString( xml );
}
@Override
public Serializable getDefaultValue() {
return Boolean.FALSE;
}
@Override
public String objectToSQLString(Boolean value, Dialect dialect) throws Exception {
return StringType.INSTANCE.objectToSQLString( value ? "S" : "N", dialect );
}
}
然后用配置注册它:
Configuration configuration = new Configuration().configure();
configuration.registerTypeOverride(new SpanishBoolean());
然后在您的实体中使用它:
@Type(type="es.buena.jamon.type.SpanishBoolean")
private Boolean visible;
希望对您有所帮助。
我的数据库中有一个 table INCIDENCIA
,它有一个 VARCHAR 列 VISIBLE
,有两个可能的值:Y
或 N
匹配 true
或 false
.
我把它映射到这个实体中:
@Entity
public class Incidencia {
private String visible;
//other fields
@Basic
@Column(name = "VISIBLE")
public String getVisible() {
return visible;
}
public void setVisible(String visible) {
this.visible = visible;
}
}
这个字段是一个字符串,因为数据库中的列是一个 VARCHAR,但是我想通过 Y/N 反序列化将其检索为 java.lang.Boolean。
有没有办法通过 Hibernate 注释来做到这一点?
谢谢。
您可以创建自己的映射类型。像这样:
package es.buena.jamon.type;
public class SpanishBoolean extends AbstractSingleColumnStandardBasicType<Boolean>
implements PrimitiveType<Boolean>, DiscriminatorType<Boolean>
{
private static final long serialVersionUID = 1L;
public static final SpanishBoolean INSTANCE = new SpanishBoolean();
public SpanishBoolean() {
super( CharTypeDescriptor.INSTANCE, new BooleanTypeDescriptor('S', 'N') );
}
@Override
public String getName() {
return "si_no";
}
@Override
public Class getPrimitiveClass() {
return boolean.class;
}
@Override
public Boolean stringToObject(String xml) throws Exception {
return fromString( xml );
}
@Override
public Serializable getDefaultValue() {
return Boolean.FALSE;
}
@Override
public String objectToSQLString(Boolean value, Dialect dialect) throws Exception {
return StringType.INSTANCE.objectToSQLString( value ? "S" : "N", dialect );
}
}
然后用配置注册它:
Configuration configuration = new Configuration().configure();
configuration.registerTypeOverride(new SpanishBoolean());
然后在您的实体中使用它:
@Type(type="es.buena.jamon.type.SpanishBoolean")
private Boolean visible;
希望对您有所帮助。