#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
, не БЕЗ этого, для записи моментов, определенных точек на временной шкале. Ищите, чтобы узнать больше. Это уже много раз рассматривалось при переполнении стека.