Я пытаюсь вставить таблицу, но имя и значения таблицы получены из файла json, когда мой код работает, поэтому мне нужно проанализировать json и получить имя таблицы, имя столбца и данные.Проблема, я получил
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement
Но я не знаю, где проблема
, вот мой createNativeQuery
Query q = entityManager.createNativeQuery("INSERT INTO " + tableName + " (" + columnName + ") VALUES (" + columnValues + ")");
, затем установите параметры, как это
for (int p = 0; p < columnSpecs.size(); p++) {
String tempColumnName = columnSpecs.get(p).getColumnName();
if ("created_By".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, createdBy);
} else if ("creation_Date".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, modifiedTimestamp);
} else if ("TMP_ID".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, TMP_ID);
} else if ("form_Id".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, formId);
} else if ("import".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, _import);
} else if ("key".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, key);
} else if ("rev".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, rev);
} else if ("revType".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, revType);
} else if ("table_Id".equalsIgnoreCase(tempColumnName)) {
q.setParameter(p + 1, tableId);
} else {
if (columnSpecs.get(p).getDataType().toLowerCase().contains("varchar")) {
q.setParameter(p + 1, payload.getString(columnSpecs.get(p).getColumnName()));
} else if (columnSpecs.get(p).getDataType().toLowerCase().contains("number")) {
q.setParameter(p + 1, payload.getBigDecimal(columnSpecs.get(p).getColumnName()));
} else if (columnSpecs.get(p).getDataType().toLowerCase().contains("timestamp")) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
q.setParameter(p + 1, new Timestamp(format.parse(payload.getString(columnSpecs.get(p).getColumnName())).getTime()));
} else if (columnSpecs.get(p).getDataType().toLowerCase().contains("boolean")) {
q.setParameter(p + 1, payload.getBoolean(columnSpecs.get(p).getColumnName()));
} else if (columnSpecs.get(p).getDataType().toLowerCase().contains("date")) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
q.setParameter(p + 1, new Timestamp(format.parse(payload.getString(columnSpecs.get(p).getColumnName())).getTime()));
}
}
}
когда я выполняю
int result = q.executeUpdate();
Я получил javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: не удалось выполнить оператор
Я хочу знать, гдеэто моя ошибка, но исключение ничего не говорит, и параметр Query не показывает, какой это мой запрос на вставку, если я мог видеть строку вставки перед выполнением, но Query eather не имеет такой функциональности, или я не смог ее найти