From 067960760717307f1e1a0a1e62cf80d5e6566a8b Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Mon, 19 Jan 2026 17:10:58 +0530 Subject: [PATCH 1/2] Fix NPE on adding new columns in the tables --- .../java/com/cloud/utils/db/GenericDaoBase.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java index 301803aab9b6..c7c8b2a1fbfe 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java +++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java @@ -89,6 +89,7 @@ import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; +import org.springframework.util.ClassUtils; /** * GenericDaoBase is a simple way to implement DAOs. It DOES NOT @@ -2047,16 +2048,23 @@ public boolean unremove(ID id) { @DB() protected void setField(final Object entity, final ResultSet rs, ResultSetMetaData meta, final int index) throws SQLException { - Attribute attr = _allColumns.get(new Pair(meta.getTableName(index), meta.getColumnName(index))); + String tableName = meta.getTableName(index); + String columnName = meta.getColumnName(index); + Attribute attr = _allColumns.get(new Pair<>(tableName, columnName)); if (attr == null) { // work around for mysql bug to return original table name instead of view name in db view case Table tbl = entity.getClass().getSuperclass().getAnnotation(Table.class); if (tbl != null) { - attr = _allColumns.get(new Pair(tbl.name(), meta.getColumnLabel(index))); + attr = _allColumns.get(new Pair<>(tbl.name(), meta.getColumnLabel(index))); } } - assert (attr != null) : "How come I can't find " + meta.getCatalogName(index) + "." + meta.getColumnName(index); - setField(entity, attr.field, rs, index); + assert (attr != null) : "How come I can't find " + tableName + "." + columnName; + if(attr == null) { + logger.warn(String.format("Failed to find attribute in the entity %s to map column %s.%s (%s)", + ClassUtils.getUserClass(entity).getSimpleName(), tableName, columnName)); + } else { + setField(entity, attr.field, rs, index); + } } @Override From 572c53d0c3a8160f0d17af74d7856257d49d7223 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Tue, 20 Jan 2026 12:27:01 +0530 Subject: [PATCH 2/2] Remove assert --- .../db/src/main/java/com/cloud/utils/db/GenericDaoBase.java | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java index c7c8b2a1fbfe..c3a4d2c2487c 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java +++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java @@ -2058,7 +2058,6 @@ protected void setField(final Object entity, final ResultSet rs, ResultSetMetaDa attr = _allColumns.get(new Pair<>(tbl.name(), meta.getColumnLabel(index))); } } - assert (attr != null) : "How come I can't find " + tableName + "." + columnName; if(attr == null) { logger.warn(String.format("Failed to find attribute in the entity %s to map column %s.%s (%s)", ClassUtils.getUserClass(entity).getSimpleName(), tableName, columnName));