Java 将Mysql中的枚举(';YES';,';NO';)列映射到hibernate中的布尔值

Java 将Mysql中的枚举(';YES';,';NO';)列映射到hibernate中的布尔值,java,mysql,hibernate,hibernate-mapping,Java,Mysql,Hibernate,Hibernate Mapping,我使用hibernate将Mysql中的一个表映射到Java类。 表中的一列具有类型“enum('YES','NO')”。我想使用hibernate注释将其映射到java类中的布尔值 根据以下文件 ('Y','N'),('0','1')和('T','F')可以映射为布尔值。 如何将“枚举(‘是’、‘否’)映射为布尔值?未测试,未编译: public class SomeEntity { .... public enum YesNoEnumType { YES,

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

根据以下文件

('Y','N'),('0','1')和('T','F')可以映射为布尔值。

如何将“枚举(‘是’、‘否’)映射为布尔值?

未测试,未编译:

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;
    }
    ...

这些类型都是基于一个字符列的映射。我认为可以将枚举映射到一个现成的java枚举,但实现您想要的唯一方法可能是实现您自己的类型,即的实现。

这是一篇较旧的文章,但可能有人会提供帮助。我需要将字符串转换为布尔值并返回

我写了一个转换器:

@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;
    }
}

为什么有布尔值的枚举?理想情况下不应该有它。但这是一个遗留表。我现在不能更改架构。我必须按原样使用它。它在这里映射到YesNoEnumType。我想将它映射到布尔java类型,而不是枚举。
@Column(name=PRODUCTION, nullable=false)
@Convert(
        converter=BusinessEnvironmentConverter.class,
        disableConversion=false
)
private boolean production;