From 63f852475ddfbd7d624ecbb4d81d7bb0541e5e20 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 7 Nov 2016 17:15:47 +1300 Subject: [PATCH] #863 - @Enumerated(EnumType.STRING) DayOfWeek day; ... incorrectly maps to SQL Integer type --- .../server/deploy/parse/DeployUtil.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployUtil.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployUtil.java index 8fc97f4a2..736ee30af 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployUtil.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/DeployUtil.java @@ -117,6 +117,10 @@ public class DeployUtil { throw new IllegalArgumentException("Class [" + enumType + "] is Not a Enum?"); } ScalarType scalarType = typeManager.getScalarType(enumType); + if (enumOverrideDefaultMapping(enumerated, scalarType)) { + logger.debug("override default enum mapping for type {}", enumType); + scalarType = null; + } if (scalarType == null) { // look for @DbEnumValue or @EnumValue annotations etc Class> enumClass = (Class>)enumType; @@ -133,6 +137,17 @@ public class DeployUtil { prop.setDbType(scalarType.getJdbcType()); } + /** + * Return true if there is an existing default mapping for the enum that needs + * to be overridden (for example, DayOfWeek defaults to Integer mapping 1 to 7 + * and some might want this mapped to 'MONDAY' etc). + */ + private boolean enumOverrideDefaultMapping(Enumerated enumerated, ScalarType scalarType) { + return enumerated != null && scalarType != null + && enumerated.value() == EnumType.STRING + && scalarType.getJdbcType() != Types.VARCHAR; + } + private ScalarType createEnumScalarTypePerSpec(Class enumType, EnumType type) { if (type == null) {