将Mysql中的枚举('YES','NO')列映射到hibernate中的Boolean

时间:2013-10-11 12:01:31

标签: java mysql hibernate hibernate-mapping

我已经使用hibernate将Mysql中的Table映射到Java类。 表中的一列有“enum('YES','NO')”类型。我想使用hibernate注释将它映射到java类中的布尔值。

根据以下文件
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/types.html#types-value-basic
('Y','N'),('0','1')和('T','F')可以映射到布尔值。
如何将“枚举('YES','NO')映射到布尔值?

3 个答案:

答案 0 :(得分:1)

未经测试,未编译:

public class SomeEntity {
    ....
    public enum YesNoEnumType {
        YES, NO
    }


    private YesNoEnumType someBooleanField;

    @Column(name = "SOME_BOOLEAN_FIELD)
    @Enumerated(YesNoEnumType.STRING)
    private YesNoEnumType getSomeBooleanField() {
        return this.someBooleanField;
    }
    ...

答案 1 :(得分:1)

这是较老的帖子,但也许有人帮忙。我需要将String转换为布尔值并返回。

我写了一个转换器:

@Converter(autoApply = true)
public class BusinessEnvironmentConverter implements AttributeConverter<Boolean, String> {
    enum BusinessEnvironment { TEST, PRODUCTION }

    @Override
    public String convertToDatabaseColumn(final Boolean production) {
        return production ? BusinessEnvironment.PRODUCTION.name(): BusinessEnvironment.TEST.name();
    }

    @Override
    public Boolean convertToEntityAttribute(final String dbField) {
        final BusinessEnvironment businessEnvironment = BusinessEnvironment.valueOf(dbField);
        return businessEnvironment.equals(BusinessEnvironment.PRODUCTION) ? TRUE : FALSE;
    }
}

使用它:

@Column(name=PRODUCTION, nullable=false)
@Convert(
        converter=BusinessEnvironmentConverter.class,
        disableConversion=false
)
private boolean production;

答案 2 :(得分:0)

这些类型都基于映射一个CHAR列。我认为可以将枚举映射到开箱即用的java枚举,但实现你想要的唯一方法可能是实现你自己的类型,即UserType的实现。