2

我已经使用休眠将 Mysql 中的表映射到 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') 可以映射为布尔值。
如何将“enum('YES', 'NO') 映射到布尔值?

4

3 回答 3

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;
    }
    ...
于 2013-10-11T12:16:53.750 回答
1

这是较旧的帖子,但也许有人可以提供帮助。我需要将字符串转换为布尔值并返回。

我写了一个转换器:

@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;
于 2016-08-29T17:22:31.393 回答
0

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

于 2013-10-11T12:17:29.427 回答