Hibernate 实体映射:检索 VARCHAR 作为布尔值

Héc*_*tor 3 java database hibernate hibernate-mapping

INCIDENCIA我的数据库中有一个表,它有一个 VARCHAR 列,VISIBLE其中包含两个可能的值:YN匹配truefalse

我已将其映射到此实体中:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个字段是一个字符串,因为数据库中的列是一个 VARCHAR,但是我想将它作为带有 Y/N 反序列化的 java.lang.Boolean 检索。

有没有办法通过 Hibernate 注释来做到这一点?

谢谢。

ram*_*inr 5

您可以创建自己的映射类型。像这样的东西:

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 ); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

然后用配置注册它:

Configuration configuration = new Configuration().configure();
configuration.registerTypeOverride(new SpanishBoolean());
Run Code Online (Sandbox Code Playgroud)

然后在您的实体中使用它:

@Type(type="es.buena.jamon.type.SpanishBoolean")
private Boolean visible;
Run Code Online (Sandbox Code Playgroud)

希望有帮助。