query = em.createNativeQuery(
"INSERT INTO store_buy(...) VALUES (product_name=:product_name, ...)"
);
query.setParameter("product_name", "aaaabb"); // 命名參數無效
Hibernate 日志顯示 VALUES (?, ?, ...),說明命名參數未被解析,退化為位置參數,導致綁定失敗。
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();
createQuery (JPQL) 支持 :name;createNativeQuery (原生 SQL) **僅支持位置參數 ?**,這是 JPA 規範限制。
// MySQL
query = em.createNativeQuery("INSERT ...", YourEntity.class);
query.executeUpdate();
// 無法直接獲取 ID,建議改用 JPQL entity.persist() 或序列/表生成策略