#json #spring #hibernate #web #hql
#json #весна #переход в спящий режим #веб #hql
Вопрос:
У меня ошибка, я не уверен, почему количество выбранных типов не соответствовало тем, что для вставки. У меня есть объект запроса с 3 значениями. billing_cycle, start_date и end_date. Я попытался добавить 0 при вставке, но все еще не работает.
ОБНОВЛЕНИЕ: Моя дата указана в строке. Это должен быть тип даты. Я изменил ВЫБОР на ЗНАЧЕНИЯ. Я получил новую ошибку: Неразрешимая дата: «Вт 15 января 00: 00:00 SGT 2013»
Мой метод вставки
@Override
@Transactional
public void insertRequest(Request request) {
try {
DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd" );
DateFormat inputFormat = new SimpleDateFormat("E MMM dd HH:mm:ss Z
yyyy");
Date sdate = outputFormat.parse(request.getStart_date()) ;
Date edate= outputFormat.parse(request.getEnd_date()) ;
String sqlQuery;
sqlQuery = "INSERT INTO Request "
"(billing_cycle, start_date, end_date) VALUES ("
request.getBilling_cycle() ", "
"'" sdate "', "
"'" edate "')";
Query query = entityManager.createQuery(sqlQuery);
query.executeUpdate();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Мои значения
{
"billing_cycle":"1",
"start_date":"Tue Jan 15 00:00:00 SGT 2013",
"end_date":"Thu Feb 14 00:00:00 SGT 2013"
}
Моя сущность
@Entity
@Table(name="request")
public class Request {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="request_id")
private int request_id;
@Column(name="billing_cycle")
private int billing_cycle;
@Column(name="start_date", columnDefinition="Date")
private String start_date;
@Column(name="end_date", columnDefinition="Date")
private String end_date;
Ошибка:
Unparseable date: "Tue Jan 15 00:00:00 SGT 2013"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
Комментарии:
1. Пожалуйста, добавьте свой код и трассировку стека в виде текста.
2. Я обновил его, проверьте
3.
createQuery
Метод используется для созданияJPQL
запросов, и я думаю, что он не поддерживаетINSERT
инструкцию. Также, почему вам нужно использоватьINSERT
оператор, когда у вас уже естьRequest
объект. Можно попробовать использоватьentityManager.persist(request)
Ответ №1:
В определении вашего атрибута request_id я вижу, что вы выбрали ПОКОЛЕНИЕ.АВТОМАТИЧЕСКАЯ стратегия. Итак, в вашем запросе на вставку вы должны сделать его нулевым.
И с другой стороны, я не понимаю интереса объекта, если вы собираетесь работать с простыми SQL-запросами. Вы можете сохранить свой объект таким образом :
entityManager.persist(request);
В вашей схеме БД используется дата. Здесь вы найдете разницу между ДАТОЙ и DATETIME
ДАТА: используется для значений с частью даты, но без части времени. MySQL извлекает и отображает значения ДАТЫ в формате ГГГГ-ММ-ДД. Поддерживаемый диапазон составляет от 1000-01-01 до 9999-12-31.
DATETIME: используется для значений, содержащих как части даты, так и времени. MySQL извлекает и отображает значения даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. Поддерживаемый диапазон составляет от 1000-01-01 00:00:00 до 9999-12-31 23:59:59.
Комментарии:
1. Он все еще не работает: количество выбранных типов не соответствовало тем, которые были выбраны для вставки [ВСТАВИТЬ В запрос (request_id, billing_cycle, start_date, end_date) select (null, 1, ‘2013-01-15’, ‘2013-02-14’)
2. Обычно запрос на выбор в insert должен содержать таблицу, подобную этой: ВСТАВИТЬ В TABLE1(COL1, COL2, COL3), ВЫБРАТЬ COL1, COL2, COL3 Из TABLE2; В вашем случае вы должны изменить SELECT со ЗНАЧЕНИЯМИ
3. Спасибо. Я обновил его до ЗНАЧЕНИЙ, но я получил новую ошибку.
4. Добавьте свои атрибуты в java.sql.Date, которые устранят проблему
5. Можете ли вы предоставить нам структуру таблицы в БД?