FIX: defaultMutationDetection for JSON was not properly distributed. Needs proper Unit-Test

This commit is contained in:
Jonas Pöhler committed 2021-10-28 18:05:34 +02:00
1 parent ad255b5912
commit 499cb68fb0
3 files changed
+98 -8

No files matched your search

@@ -48,6 +48,7 @@ public final class DeployUtil {
private final EncryptKeyManager encryptKeyManager;
private final Encryptor bytesEncryptor;
private final boolean useValidationNotNull;
private final MutationDetection defaultJsonMutationDetection;
public DeployUtil(TypeManager typeMgr, DatabaseConfig config) {
this.typeManager = typeMgr;
@@ -58,6 +59,7 @@ public final class DeployUtil {
Encryptor be = config.getEncryptor();
this.bytesEncryptor = be != null ? be : new SimpleAesEncryptor();
this.useValidationNotNull = config.isUseValidationNotNull();
this.defaultJsonMutationDetection = config.getJsonMutationDetection();
}
public TypeManager getTypeManager() {
@@ -203,7 +205,7 @@ public final class DeployUtil {
private void setDbJsonType(DeployBeanProperty prop, int dbType, int dbLength, MutationDetection mutationDetection) {
prop.setDbType(dbType);
prop.setMutationDetection(mutationDetection);
prop.setMutationDetection(mutationDetection == MutationDetection.DEFAULT ? defaultJsonMutationDetection : mutationDetection);
ScalarType<?> scalarType = typeManager.getJsonScalarType(prop, dbType, dbLength);
if (scalarType == null) {
throw new RuntimeException("No ScalarType for JSON property [" + prop + "] [" + dbType + "]");
@@ -2,7 +2,12 @@ package io.ebeaninternal.server.type;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.ebean.annotation.*;
import io.ebean.annotation.DbArray;
import io.ebean.annotation.DbEnumType;
import io.ebean.annotation.DbEnumValue;
import io.ebean.annotation.EnumValue;
import io.ebean.annotation.MutationDetection;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.JsonConfig;
import io.ebean.config.PlatformConfig;
@@ -36,13 +41,41 @@ import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.*;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.URI;
import java.net.URL;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import java.time.*;
import java.util.*;
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.Year;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Currency;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -123,6 +156,8 @@ public final class DefaultTypeManager implements TypeManager {
private final PlatformArrayTypeFactory arrayTypeSetFactory;
private GeoTypeBinder geoTypeBinder;
private final MutationDetection defaultJsonMutationDetection;
/**
* Create the DefaultTypeManager.
*/
@@ -142,6 +177,7 @@ public final class DefaultTypeManager implements TypeManager {
this.offlineMigrationGeneration = DbOffline.isGenerateMigration();
this.defaultEnumType = config.getDefaultEnumType();
this.fileType = new ScalarTypeFile(config.getTempFileProvider());
this.defaultJsonMutationDetection = config.getJsonMutationDetection();
initialiseStandard(config);
initialiseJavaTimeTypes(config);
@@ -326,7 +362,8 @@ public final class DefaultTypeManager implements TypeManager {
Type genericType = prop.getGenericType();
boolean hasJacksonAnnotations = objectMapperPresent && checkJacksonAnnotations(prop);
boolean keepSource = prop.getMutationDetection() == MutationDetection.SOURCE;
boolean keepSource = prop.getMutationDetection() == MutationDetection.SOURCE
|| (prop.getMutationDetection() == MutationDetection.DEFAULT && defaultJsonMutationDetection == MutationDetection.SOURCE);
if (type.equals(List.class)) {
DocPropertyType docType = getDocType(genericType);
if (!hasJacksonAnnotations && isValueTypeSimple(genericType)) {