evitare che l'update inserisca i valori di default

This commit is contained in:
2024-11-22 15:08:26 +01:00
parent e19d122a46
commit 25124f9308

View File

@@ -60,7 +60,6 @@ import java.security.NoSuchAlgorithmException;
import java.sql.Blob; import java.sql.Blob;
import java.sql.Clob; import java.sql.Clob;
import java.sql.*; import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
@@ -1183,32 +1182,28 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
@Override @Override
public void applyDefault(String fieldName) throws IllegalAccessException, IOException { public void applyDefault(String fieldName) throws IllegalAccessException, IOException {
List<Field> fields = getEntityHolder().getFields(this.getClass()); List<EntityHierarchy.Field> fields = getEntityHolder().getEntityFields(this.getClass(),
x -> (fieldName == null || x.getFieldName().equalsIgnoreCase(fieldName)) && x.isSqlField());
if (!UtilityString.isNullOrEmpty(fieldName)) {
fields = fields.stream()
.filter(x -> x.getName().equalsIgnoreCase(fieldName))
.collect(Collectors.toList());
}
for (Field field : fields) { for (EntityHierarchy.Field entityHierarchyField : fields) {
SqlField sqlField = field.getAnnotation(SqlField.class); Field field = entityHierarchyField.getField();
if (sqlField != null) { SqlField sqlField = entityHierarchyField.getSqlField();
String defaultValue = sqlField.defaultObjectValue();
String format = sqlField.format();
field.setAccessible(true);
Object object = field.get(this);
// NB: aiuta a rispettare la regola del default nel troncare la String defaultValue = sqlField.defaultObjectValue();
// data anche se passata dall'esterno String format = sqlField.format();
if (object instanceof Date && (CommonConstants.SYSDATE.equals(format) || CommonConstants.SYSDATE.equals(defaultValue))) { field.setAccessible(true);
field.set(this, DateUtils.truncate(object, Calendar.DAY_OF_MONTH)); Object object = field.get(this);
}
if (object == null && !"".equals(defaultValue)) { // NB: aiuta a rispettare la regola del default nel troncare la
object = UtilityString.stringToObject(defaultValue, field.getType()); // data anche se passata dall'esterno
field.set(this, object); if (object instanceof Date && (CommonConstants.SYSDATE.equals(format) || CommonConstants.SYSDATE.equals(defaultValue))) {
} field.set(this, DateUtils.truncate(object, Calendar.DAY_OF_MONTH));
}
if (object == null && !defaultValue.isEmpty()) {
object = UtilityString.stringToObject(defaultValue, field.getType());
field.set(this, object);
} }
} }
} }
@@ -2008,7 +2003,6 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
} }
} }
String defaultValue = null;
int maxValueLength = -1; int maxValueLength = -1;
boolean nullableValue = true; boolean nullableValue = true;
@@ -2016,15 +2010,6 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
Object prevValue = entityHierachyfield.isPrimaryKey() ? SqlFieldHolder.getSqlValueFieldAsString(originalObject, sqlField.trimSpaces()) : null; Object prevValue = entityHierachyfield.isPrimaryKey() ? SqlFieldHolder.getSqlValueFieldAsString(originalObject, sqlField.trimSpaces()) : null;
if (entityHierachyfield.isSqlField()) { if (entityHierachyfield.isSqlField()) {
defaultValue = sqlField.defaultObjectValue();
SimpleDateFormat sdf = null;
if (CommonConstants.SYSDATE.equals(defaultValue)) sdf = new SimpleDateFormat("yyyy-MM-dd");
else if (CommonConstants.TIMESTAMP.equals(defaultValue))
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (sdf != null) defaultValue = sdf.format(new Date());
maxValueLength = sqlField.maxLength(); maxValueLength = sqlField.maxLength();
nullableValue = sqlField.nullable(); nullableValue = sqlField.nullable();
} }
@@ -2036,7 +2021,7 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
continue; continue;
} }
if (originalObject == null && UtilityString.isNullOrEmpty(defaultValue)) if (originalObject == null)
continue; continue;
if (!entityHierachyfield.isSqlField() || field.getName().startsWith("refUuid")) if (!entityHierachyfield.isSqlField() || field.getName().startsWith("refUuid"))
@@ -2047,23 +2032,21 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
continue; continue;
if (entityHierachyfield.isClob()) { if (entityHierachyfield.isClob()) {
if (originalObject != null) resultList.add(new Quartet<>(
resultList.add(new Quartet<>( SqlFieldHolder.getSqlValue(sqlField.value(), field),
SqlFieldHolder.getSqlValue(sqlField.value(), field), prepareClobData(originalObject),
prepareClobData(originalObject), false,
false, prevValue));
prevValue));
} else if (entityHierachyfield.isBlob()) { } else if (entityHierachyfield.isBlob()) {
if (originalObject != null) resultList.add(new Quartet<>(
resultList.add(new Quartet<>( SqlFieldHolder.getSqlValue(sqlField.value(), field),
SqlFieldHolder.getSqlValue(sqlField.value(), field), prepareBlobData(originalObject),
prepareBlobData(originalObject), false,
false, prevValue));
prevValue));
} else { } else {
Object finalValue = SqlFieldHolder.getSqlValueFieldAsObject(originalObject == null ? defaultValue : originalObject, sqlField.trimSpaces()); Object finalValue = SqlFieldHolder.getSqlValueFieldAsObject(originalObject, sqlField.trimSpaces());
if (finalValue instanceof Character) { if (finalValue instanceof Character) {
finalValue = finalValue.toString(); finalValue = finalValue.toString();