как мне определить/сохранить java.util.Календарь в Postgres SQL (JPA с использованием liquibase)?

#java #sql #postgresql #jpa #liquibase

Вопрос:

Я пытаюсь понять, как определить Calendar объект в JPA, чтобы я мог сохранить его в БД Postgres.. Я знаю, как сохранить dt datetime объект или в БД, но я не понимаю, как сохранить Calendar объект.

Вот мое определение сущности

 ....

import lombok.Data;

import javax.persistence.*;
import java.util.Calendar;

@Entity
@Data
@Table(name = "User", schema = "Auth")
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "UserId")
    private Integer userId;

    @Column(name = "Mail")
    private String mail;

    @Column(name = "CalendarEntry")
    private Calendar calendarEntry;

}

 

И это мой файл базы данных/миграции Liquibase для определения SQL..

 CREATE TABLE IF NOT EXISTS Auth.User
(
    UserId                      SERIAL,
    Mail                        VARCHAR(256),
    CalendarEntry               TIMESTAMP(2) NULL,
    );
CREATE INDEX IF NOT EXISTS idx_user_mail ON Auth.User (Mail);
 

Обратите внимание, что у меня есть обычное TIMESTAMP определение в качестве типа SQL для CalendarEntry столбца. Я хочу знать, что я должен заменить Calendar в этом определении столбца SQL.

Я новичок в JPA (и Java в целом), так что это сбивает меня с толку. спасибо за любую помощь …

Комментарии:

1. Не. Вместо этого используйте java.time API .

2. Ужасные Date классы , Calendar , и Timestamp были много лет назад вытеснены современными классами java.time , определенными в JSR 310. Ищите, чтобы узнать больше. Сохранение значений даты и времени в Java в базе данных уже рассматривалось много раз.

3. Вы используете неправильный тип для столбца базы данных. Используйте TIMESTAMP WITH TIME ZONE , не БЕЗ этого, для записи моментов, определенных точек на временной шкале. Ищите, чтобы узнать больше. Это уже много раз рассматривалось при переполнении стека.