diff --git a/src/main/java/com/avaje/ebean/annotation/EnumMapping.java b/src/main/java/com/avaje/ebean/annotation/EnumMapping.java deleted file mode 100644 index fd7b60e52..000000000 --- a/src/main/java/com/avaje/ebean/annotation/EnumMapping.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.avaje.ebean.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * For mapping the values of an Enum to and from Database values. - *

- * Also refer to the {@link EnumValue} approach which probably the preferred now - * (preferred over using this EnumMapping annotation). - *

- *

- * Both of the approaches defined in the JPA have significant problems!!! - *

- *

- * Using the ordinal value is VERY RISKY because that depends on the compile - * order of the enum values. Aka if you change the order of the enum values you - * have changed their ordinal values and now your DB values are WRONG - a HUGE - * disaster!!!. - *

- *

- * Using the String values of enums is fairly restrictive because in a Database - * these values are usually truncated into short codes (e.g. "A" short for - * "ACTIVE") so space used in the database is minimised. Making your enum names - * match the database values would give them very short less meaningful names - - * not a great solution. - *

- *

- * You can use this annotation to control the mapping of your enums to database - * values. - *

- *

- * The design of this using nameValuePairs is not optimal for safety or - * refactoring so if you have a better solution I'm all ears. The other - * solutions would probably involve modifying each enumeration with a method - * which may be ok. - *

- *

- * An example mapping the UserState enum. - *

- * - *
- * ...
- * @EnumMapping(nameValuePairs="NEW=N, ACTIVE=A, INACTIVE=I")
- *  public enum UserState {
- *  NEW,
- *  ACTIVE,
- *  INACTIVE;
- *  }
- * 
- * - * @see EnumValue - */ -@Target({ ElementType.TYPE }) -@Retention(RetentionPolicy.RUNTIME) -public @interface EnumMapping { - - /** - * A comma delimited list of name=value pairs. - *

- * e.g. "ACTIVE=A, INACTIVE=I, NEW=N". - *

- *

- * Where ACTIVE, INACTIVE and NEW are the enumeration values and "A", "I" and - * "N" are the database values. - *

- *

- * This is not really an optimal approach so if you have a better one I'm all - * ears - thanks. - *

- */ - String nameValuePairs(); - - /** - * Defaults to mapping values to database VARCHAR type. If this is set to true - * then the values will be converted to INTEGER and mapped to the database - * integer type. - *

- * e.g. "ACTIVE=1, INACTIVE=0, NEW=2". - *

- */ - boolean integerType() default false; - - /** - * The length of DB column if mapping to string values. - */ - int length() default 0; -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java index 65b8e6e83..3f063c9db 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java @@ -2,17 +2,27 @@ package com.avaje.ebeaninternal.server.type; import com.avaje.ebean.annotation.DbEnumType; import com.avaje.ebean.annotation.DbEnumValue; -import com.avaje.ebean.annotation.EnumMapping; import com.avaje.ebean.annotation.EnumValue; -import com.avaje.ebean.config.*; +import com.avaje.ebean.config.CompoundType; +import com.avaje.ebean.config.CompoundTypeProperty; +import com.avaje.ebean.config.JsonConfig; +import com.avaje.ebean.config.ScalarTypeConverter; +import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbType; import com.avaje.ebeaninternal.server.core.BootupClasses; -import com.avaje.ebeaninternal.server.lib.util.StringHelper; -import com.avaje.ebeaninternal.server.type.reflect.*; +import com.avaje.ebeaninternal.server.type.reflect.CheckImmutable; +import com.avaje.ebeaninternal.server.type.reflect.CheckImmutableResponse; +import com.avaje.ebeaninternal.server.type.reflect.ImmutableMeta; +import com.avaje.ebeaninternal.server.type.reflect.ImmutableMetaFactory; +import com.avaje.ebeaninternal.server.type.reflect.KnownImmutable; +import com.avaje.ebeaninternal.server.type.reflect.ReflectionBasedCompoundType; +import com.avaje.ebeaninternal.server.type.reflect.ReflectionBasedCompoundTypeProperty; +import com.avaje.ebeaninternal.server.type.reflect.ReflectionBasedTypeBuilder; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.*; +import org.joda.time.DateMidnight; +import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; import org.joda.time.LocalTime; @@ -32,11 +42,29 @@ import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; import java.sql.Types; -import java.time.*; +import java.time.DayOfWeek; import java.time.Duration; import java.time.Instant; +import java.time.Month; +import java.time.MonthDay; +import java.time.OffsetDateTime; +import java.time.OffsetTime; import java.time.Period; -import java.util.*; +import java.time.Year; +import java.time.YearMonth; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Currency; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.TimeZone; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; /** @@ -516,20 +544,9 @@ public final class DefaultTypeManager implements TypeManager, KnownImmutable { } } - // get the mapping information from EnumMapping - EnumMapping enumMapping = enumType.getAnnotation(EnumMapping.class); - if (enumMapping == null) { - // look for EnumValue annotations instead - return createEnumScalarType2(enumType); - } - String nameValuePairs = enumMapping.nameValuePairs(); - boolean integerType = enumMapping.integerType(); - int dbColumnLength = enumMapping.length(); - - Map nameValueMap = StringHelper.delimitedToMap(nameValuePairs, ",", "="); - - return createEnumScalarType(enumType, nameValueMap, integerType, dbColumnLength); + // look for EnumValue annotations instead + return createEnumScalarType2(enumType); } /**