我的数据库中有一个表INCIDENCIA
,其中包含一个VARCHAR列VISIBLE
,其中包含两个可能的值:Y
或N
匹配true
或{{ 1}}。
我把它映射到这个实体:
false
这个字段是一个String,因为数据库中的列是一个VARCHAR,但我想将它作为java.lang.Boolean检索并带有Y / N反序列化。
Hibernate注释有没有办法做到这一点?
感谢。
答案 0 :(得分:4)
您可以创建自己的映射类型。像这样:
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;
希望有所帮助。