Я пытаюсь использовать компонент расписания Primefaces, я обнаружил проблему при вставке даты () в базу данных (postgresql), существует проблема несовместимости между типом даты java и postgres с меткой времени, которую я не могу представить решать:

org.hibernate.exception.DataException nested exception is: 
ERROR: invalid input syntax for type timestamp : 
    "16:00:00.747000 +00:00:00"

Вот функция, которую я тестировал при вставке в базу данных:

@Test
public void testEdit() {
    Event event = new Event(); 
    Calendar t = (Calendar) today().clone();   
    t.set(Calendar.AM_PM, Calendar.PM);  
    t.set(Calendar.DATE, t.get(Calendar.DATE) + 4);  
    t.set(Calendar.HOUR, 4); 
    event.setStartDate(t.getTime());
    sessionService.save(event);
}
0
Habib Ksentini 8 Июл 2013 в 10:32
Больше похоже на проблему с типом столбца Postgre и Timestamp, чем со стороной Java.
 – 
Luiggi Mendoza
8 Июл 2013 в 10:38
Да, я не могу найти способ вставить объект типа Date в столбец типа timestamp
 – 
Habib Ksentini
8 Июл 2013 в 10:42

1 ответ

Лучший ответ

Похоже, ваши сопоставления Hibernate неверны. Вам нужно сопоставить столбец как временное поле «отметки времени», но похоже, что ваш компьютер отправляет только время. В метке времени есть компонент даты, но в "16:00:00.747000 +00:00:00" нет даты.

Вы не показали сопоставление сущности, поэтому трудно быть более конкретным. Если вы используете аннотации сопоставления JPA2, вы должны написать:

@Temporal(TIMESTAMP)
2
Craig Ringer 8 Июл 2013 в 10:43
Ну вот и твоя проблема. Вы не можете сохранить TIME в столбце TIMESTAMP. Используйте столбец TIME в базе данных или сопоставление TIMESTAMP, чтобы соответствовать тому, что действительно находится в базе данных.
 – 
Craig Ringer
8 Июл 2013 в 10:50