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

JPA 原生 SQL 插入參數綁定:位置參數與命名參數正確用法

     編輯:程式設計綜合問答

問題代碼

query = em.createNativeQuery(
    "INSERT INTO store_buy(...) VALUES (product_name=:product_name, ...)"
);
query.setParameter("product_name", "aaaabb"); // 命名參數無效

Hibernate 日志顯示 VALUES (?, ?, ...),說明命名參數未被解析,退化為位置參數,導致綁定失敗。

正確寫法:位置參數 (JPA 標準)

Query query = em.createNativeQuery(
    "INSERT INTO store_buy(product_name, numbers, price, style, ower, orderdate, descs) " +
    "VALUES (?, ?, ?, ?, ?, ?, ?)"
);
query.setParameter(1, "aaaabb");
query.setParameter(2, 100);
query.setParameter(3, 100);
query.setParameter(4, "aa");
query.setParameter(5, "aaaa");
query.setParameter(6, "aaa");
query.setParameter(7, "aaaa");
query.executeUpdate();

命名參數僅限 JPQL

createQuery (JPQL) 支持 :name;createNativeQuery (原生 SQL) **僅支持位置參數 ?**,這是 JPA 規範限制。

獲取自增主鍵 (可選)

// MySQL
query = em.createNativeQuery("INSERT ...", YourEntity.class);
query.executeUpdate();
// 無法直接獲取 ID,建議改用 JPQL entity.persist() 或序列/表生成策略
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved