postgres类型/ java枚举上的hibernate验证失败

时间:2016-02-15 13:40:29

标签: java hibernate postgresql enums

概述

我尝试使用在WildFly10上运行Hibernate的postgres自定义枚举(也使用WildFly9进行测试,结果相同)。 在搜索过程中,我找到了几个点上提到的解决方案,例如

所以基本上我添加了一个自定义UserType并添加了一个指向特定java类型/转换器的@Type注释。它可以工作,我可以在JEE应用程序中使用它,也可以在JSE应用程序中使用它没有任何问题。

问题/问题

如果我启用验证

<property name="hibernate.hbm2ddl.auto" value="validate"/> 

我收到以下错误

Schema-validation: wrong column type encountered
in column [gender] in table [test]; 
found [gender_type (Types#VARCHAR)], but expecting [uuid (Types#OTHER)]

为什么在gender_type正确的情况下期待UUID?

详细

PostgreSQL类型:

CREATE TYPE gender_type as ENUM ('MALE','FEMALE');

PostgreSQL表

create table test (
  name varchar(200) NOT NULL PRIMARY KEY,
  gender gender_type NOT NULL
);

Java enum

public enum GenderEnum {

  MALE ("MALE"),
  FEMAIL ("FEMALE");

  private String value;

  private GenderEnum(String value) {
    this.value = value;
  }

  public String getValue() {
    return value;
  }        
}

Java EnumType

public class GenderEnumType extends GenericEnumType<String, GenderEnum> {

  public GenderEnumType() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    super(GenderEnum.class, GenderEnum.values(), "getValue", Types.OTHER);
  }


  @Override
  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
    return nullSafeGet(rs, names, owner);
  }

  @Override
  public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {
      nullSafeSet(st, value, index);
    }        
  }

GenericEnumType基本上是来自http://octagen.at/2014/10/postgresql-custom-data-types-enum-in-hibernate/的那个。

测试实体:不是

@Basic(optional = false)            
@Enumerated (EnumType.STRING)
@Type (type = "full.path.to.GenderEnumType")
@Column(name = "gender")
private GenderEnum gender;

,也不

@Basic(optional = false)               
@Type (type = "full.path.to.GenderEnumType")
@Column(name = "gender")
private GenderEnum gender;

的工作原理。

0 个答案:

没有答案