How to set enumeration field as integer using Hibernate on db?

I have an integer column as a “status” in my db.

My enum class:

public enum MemberStatus {
   PASSIVE(0),ACTIVE(1);

   private int value;

   private MemberStatus(int value) {
      this.value = value;
   }

   public int getValue() {
      return value;
   }

}

My essence:

@Column(name = "status", nullable = false)
@Enumerated(EnumType.ORDINAL)
private MemberStatus status;

Hibernation Journal:

org.postgresql.util.PSQLException: ERROR: the "status" column is of type integer , but the expression is of type bytea . Hint: you will need to rewrite or apply the .bytea expression

I am using PostgreSQL. How to solve this problem? Any idea?

+4
source share
1 answer

I suggest you use a converter.

This is the cleanest solution I have come to, because:

  • ,
  • ,

:

@Column(name = "status", nullable = false)
@Convert(converter = MemberStatusEnumConverter.class)
private MemberStatus status;

:

public enum MemberStatus {
   PASSIVE,
   ACTIVE;
}

MemberStatusEnumConverter:

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter
public class MemberStatusEnumConverter implements    
AttributeConverter<MemberStatus,Integer>{
    @Override
    public Integer convertToDatabaseColumn(MemberStatus attribute) {
        switch (attribute) {
            case PASSIVE:
                return new Integer(0);
            case COUNTYLEVEL:
                return new Integer(1);
            default:
                throw new IllegalArgumentException("Unknown" + attribute);
        }
    }

    @Override
    public MemberStatus convertToEntityAttribute(Integer dbData) {
        if (dbData == 0){
            return MemberStatus.PASSIVE;
        } else if (dbData == 1){
            return MemberStatus.ACTIVE;
        }
        else{
            throw new IllegalArgumentException("Unknown" + dbData);
        }
    }
}

, .

+2

All Articles