예제 #1
0
파일: EnumType.java 프로젝트: skuarch/apis
  @Override
  public void setParameterValues(Properties parameters) {
    final ParameterType reader = (ParameterType) parameters.get(PARAMETER_TYPE);

    // IMPL NOTE : be protective about not setting enumValueMapper (i.e. calling
    // treatAsNamed/treatAsOrdinal)
    // in cases where we do not have enough information.  In such cases we do additional checks
    // as part of nullSafeGet/nullSafeSet to query against the JDBC metadata to make the
    // determination.

    if (reader != null) {
      enumClass = reader.getReturnedClass().asSubclass(Enum.class);

      final boolean isOrdinal;
      final javax.persistence.EnumType enumType = getEnumType(reader);
      if (enumType == null) {
        isOrdinal = true;
      } else if (javax.persistence.EnumType.ORDINAL.equals(enumType)) {
        isOrdinal = true;
      } else if (javax.persistence.EnumType.STRING.equals(enumType)) {
        isOrdinal = false;
      } else {
        throw new AssertionFailure("Unknown EnumType: " + enumType);
      }

      if (isOrdinal) {
        treatAsOrdinal();
      } else {
        treatAsNamed();
      }
      sqlType = enumValueMapper.getSqlType();
    } else {
      String enumClassName = (String) parameters.get(ENUM);
      try {
        enumClass =
            ReflectHelper.classForName(enumClassName, this.getClass()).asSubclass(Enum.class);
      } catch (ClassNotFoundException exception) {
        throw new HibernateException("Enum class not found", exception);
      }

      final Object useNamedSetting = parameters.get(NAMED);
      if (useNamedSetting != null) {
        final boolean useNamed = ConfigurationHelper.getBoolean(NAMED, parameters);
        if (useNamed) {
          treatAsNamed();
        } else {
          treatAsOrdinal();
        }
        sqlType = enumValueMapper.getSqlType();
      }
    }

    final String type = (String) parameters.get(TYPE);
    if (type != null) {
      sqlType = Integer.decode(type);
    }
  }
예제 #2
0
파일: EnumType.java 프로젝트: skuarch/apis
 @Override
 public String toLoggableString(Object value, SessionFactoryImplementor factory) {
   if (enumValueMapper != null) {
     return enumValueMapper.toXMLString((Enum) value);
   }
   return value.toString();
 }
예제 #3
0
파일: EnumType.java 프로젝트: skuarch/apis
 @Override
 public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
     throws SQLException {
   if (enumValueMapper == null) {
     resolveEnumValueMapper(rs, names[0]);
   }
   return enumValueMapper.getValue(rs, names);
 }
예제 #4
0
파일: EnumType.java 프로젝트: skuarch/apis
 @Override
 public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session)
     throws HibernateException, SQLException {
   if (enumValueMapper == null) {
     resolveEnumValueMapper(st, index);
   }
   enumValueMapper.setValue(st, (Enum) value, index);
 }
예제 #5
0
파일: EnumType.java 프로젝트: skuarch/apis
 @Override
 public Object fromXMLString(String xmlValue) {
   return enumValueMapper.fromXMLString(xmlValue);
 }
예제 #6
0
파일: EnumType.java 프로젝트: skuarch/apis
 @Override
 public String toXMLString(Object value) {
   return enumValueMapper.toXMLString((Enum) value);
 }
예제 #7
0
파일: EnumType.java 프로젝트: skuarch/apis
 @Override
 public String objectToSQLString(Object value) {
   return enumValueMapper.objectToSQLString((Enum) value);
 }
예제 #8
0
파일: EnumType.java 프로젝트: skuarch/apis
 private void treatAsNamed() {
   if (enumValueMapper == null || !NamedEnumValueMapper.class.isInstance(enumValueMapper)) {
     enumValueMapper = new NamedEnumValueMapper();
     sqlType = enumValueMapper.getSqlType();
   }
 }
예제 #9
0
파일: EnumType.java 프로젝트: skuarch/apis
 private void treatAsOrdinal() {
   if (enumValueMapper == null || !OrdinalEnumValueMapper.class.isInstance(enumValueMapper)) {
     enumValueMapper = new OrdinalEnumValueMapper();
     sqlType = enumValueMapper.getSqlType();
   }
 }