@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); } }
private void treatAsNamed() { if (enumValueMapper == null || !NamedEnumValueMapper.class.isInstance(enumValueMapper)) { enumValueMapper = new NamedEnumValueMapper(); sqlType = enumValueMapper.getSqlType(); } }
private void treatAsOrdinal() { if (enumValueMapper == null || !OrdinalEnumValueMapper.class.isInstance(enumValueMapper)) { enumValueMapper = new OrdinalEnumValueMapper(); sqlType = enumValueMapper.getSqlType(); } }