首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

集合遍歷顯示源碼異常:外鍵關聯缺失導致子表數據查不到

     編輯:程式設計綜合問答

現象

頁面循環顯示集合數據,部分記錄正常,部分顯示源碼片段(如${item.name}未解析)。

根因分析

  1. 數據不完整:主表記錄存在,但關聯子表數據因外鍵未建立/外鍵值不匹配查詢不到。
  2. 模板引擎容錯:對象屬性為null時,某些模板引擎(如Velocity、Freemarker)默認輸出${null}或空串,但若對象整個為null(如parent.child為null),訪問child.prop可能拋異常或輸出表達式原文。
  3. 集合元素類型不一致:查詢返回List<Object[]>而非實體對象,導致屬性訪問失敗。

驗證方法

// Controller層打印
list.forEach(item -> {
    System.out.println("Item: " + item);
    if (item.getChild() == null) 
        System.out.println("WARNING: Child is null for " + item.getId());
});

解決方案

  1. 數據庫層:補齊外鍵約束,確保主子表關聯完整性;或用LEFT JOIN查詢保留主表記錄。
  2. Service層:查詢後填充默認空對象if (parent.getChild() == null) parent.setChild(new Child())。
  3. 模板層:添加空判斷#if($item.child) $item.child.name #end。

教訓

「源碼顯示在頁面上」通常是**模板引擎異常捕獲後輸出原表達式**,根因多為**數據對象圖不完整**(關聯對象為null)。優先檢查數據查詢與關聯映射。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved