[java] Hibernate에서 @Temporal 어노테이션의 사용은 무엇입니까?

Hibernate 문서에는 @Temporal주석에 대한 아래 정보가 있습니다 .

일반 Java API에서는 시간의 시간 정밀도가 정의되지 않습니다. 시간 데이터를 다룰 때 데이터베이스에서 예상되는 정밀도를 설명 할 수 있습니다. 시간 데이터는 DATE, TIME 또는 TIMESTAMP 정밀도 (예 : 실제 날짜, 시간 만 또는 둘 다)를 가질 수 있습니다. @Temporal 주석을 사용하여 미세 조정하십시오.

무슨 temporal precision of time is not defined뜻이야? temporal데이터와 그 정밀도 는 무엇입니까 ? 어떻게 미세 조정합니까?



답변

이 주석은 영구 필드 또는 java.util.Date및 유형의 속성에 지정되어야합니다 java.util.Calendar. 이러한 유형의 필드 또는 속성에 대해서만 지정할 수 있습니다.

Temporal주석은와 함께 사용될 수있는 Basic주석의 Id주석 또는 ElementCollection주석 (요소 컬렉션 값은 시간적 형인 경우.

일반 Java API에서는 시간의 시간 정밀도가 정의되지 않습니다. 시간 데이터를 다룰 때 데이터베이스에서 예상되는 정밀도를 설명 할 수 있습니다. 시간 데이터는 DATE, TIME 또는 TIMESTAMP 정밀도 (즉, 실제 날짜, 시간 만 또는 둘 다)를 가질 수 있습니다. @Temporal주석을 사용하여 미세 조정 하십시오 .

시간 데이터는 시간과 관련된 데이터입니다. 예를 들어, 콘텐츠 관리 시스템에서 기사의 작성 날짜와 마지막 업데이트 날짜는 시간 데이터입니다. 어떤 경우에는 임시 데이터에 정밀도가 필요하며 정확한 날짜 / 시간 또는 둘 다 ( TIMESTAMP)를 데이터베이스 테이블 에 저장하려고 합니다.

시간 정밀도는 핵심 Java API에 지정되지 않습니다. 타임 스탬프와 사이를 앞뒤로 변환 @Temporal하는 JPA주석입니다 java.util.Date. 또한 time-stamp시간으로 변환 됩니다. 예를 들어 아래 스 니펫 @Temporal(TemporalType.DATE) 에서 시간 값을 삭제하고 날짜 만 유지합니다 .

@Temporal(TemporalType.DATE)
private java.util.Date creationDate;

javadocs에 따라

쿼리 메서드 매개 변수에 적절한 {@code TemporalType}을 선언하는 주석입니다. 이 주석은 기본값이있는 {@link Date} 유형의 매개 변수에만 사용할 수 있습니다.TemporalType.DATE

[다양한 출처에서 수집 한 위 정보]


답변

@Temporal 다음 열 항목의 데이터베이스 테이블에 저장하는 데 사용할 수있는 JPA 주석입니다.

  1. DATE ( java.sql.Date)
  2. 시간 ( java.sql.Time)
  3. 타임 스탬프 ( java.sql.Timestamp)

일반적으로 Date클래스에서 필드를 선언하고 저장하려고 할 때. 데이터베이스에 TIMESTAMP
저장됩니다 .

@Temporal
private Date joinedDate;

위의 코드는 08-07-17 04 : 33 : 35.870000000 PM 과 같은 값을 저장합니다 .

DATE 만 데이터베이스에 저장
하려면 사용 / 정의 할 수 있습니다 TemporalType.

@Temporal(TemporalType.DATE)
private Date joinedDate;

이번에 는 데이터베이스에 08-07-17 을 저장 합니다.

@Temporal요구 사항에 따라 사용할 수있는 다른 속성도 있습니다 .


답변

임시 유형은 영구 상태 매핑에 사용할 수있는 시간 기반 유형의 집합입니다.

지원 시간적 유형의 목록이 포함하는 세 java.sql종류 java.sql.Date, java.sql.Timejava.sql.Timestamp, 그것을 포함하는 두 java.util유형 java.util.Datejava.util.Calendar.

java.sql유형은 완전히 번거 로움 – 무료입니다. 다른 단순 매핑 유형과 동일하게 작동하며 특별한 고려 사항이 필요하지 않습니다.

그러나 두 java.util유형 java.sql에는 JDBC 드라이버와 통신 할 때 사용할 JDBC 유형을 나타 내기 위해 추가 메타 데이터가 필요 합니다. 이것은 주석으로 주석을 달고 @TemporalJDBC 유형을 TemporalType열거 유형 의 값으로 지정하여 수행됩니다 .

java.sql유형 을 나타내는 DATE, TIME 및 TIMESTAMP의 세 가지 열거 값이 있습니다.


답변

이것을 사용하십시오

@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;

public Calendar getCreateDate() {
    return createDate;
}

public void setCreateDate(Calendar createDate) {
    this.createDate = createDate;
}


답변

짧은 답변을 찾고 있다면 :

java.util.Date를 사용하는 경우 Java는 SQL 유형과 직접 관련되는 방법을 실제로 알지 못합니다. 이것이 작용할 때 @Temporal입니다. 원하는 SQL 유형을 지정하는 데 사용됩니다.

출처 : Baeldung


답변

저는 Hibernate 5.2를 사용 @Temporal하며 더 이상 필요하지 않습니다.
java.util.date , sql.date , time.LocalDate 는 Date / timestamp와 같은 적절한 데이터 유형으로 DB에 저장됩니다.


답변

@Temporal 어노테이션을 사용하여 데이터베이스 테이블에 날짜, 시간 또는 둘 다를 삽입하고 TemporalType을 사용하여 데이터, 시간 또는 둘 다 int 테이블을 삽입 할 수 있습니다.

@Temporal(TemporalType.DATE) // insert date
@Temporal(TemporalType.TIME) // insert time
@Temporal(TemporalType.TIMESTAMP) // insert  both time and date.