Hibernate @Enumerated mapping

后端 未结 4 2151
[愿得一人]
[愿得一人] 2020-12-05 04:39

Hibernate provides @Enumerated annotation which supports two types of Enum mapping either using ORDINAL or STRING. When w

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-05 05:17

    The best to customize mapping for enums is to use AttributeConverter i.e:

    @Entity
    public class Person {
        ...
        @Basic
        @Convert( converter=GenderConverter.class )
        public Gender gender;
    }
    
    public enum Gender {
        MALE( 'M' ),
        FEMALE( 'F' );
    
        private final char code;
    
        private Gender(char code) {
            this.code = code;
        }
    
        public char getCode() {
            return code;
        }
    
        public static Gender fromCode(char code) {
            if ( code == 'M' || code == 'm' ) {
                return MALE;
            }
            if ( code == 'F' || code == 'f' ) {
                return FEMALE;
            }
            throw ...
        }
    }
    
    @Converter
    public class GenderConverter
            implements AttributeConverter {
    
        public Character convertToDatabaseColumn(Gender value) {
            if ( value == null ) {
                return null;
            }
    
            return value.getCode();
        }
    
        public Gender convertToEntityAttribute(Character value) {
            if ( value == null ) {
                return null;
            }
    
            return Gender.fromCode( value );
        }
    }
    

    You can find it in Hibernate docs: http://docs.jboss.org/hibernate/orm/5.0/mappingGuide/en-US/html_single/#d5e678

提交回复
热议问题