Dokumentacja Hibernate zawiera poniższe informacje dotyczące @Temporal
adnotacji:
W prostych interfejsach API języka Java czasowa precyzja czasu nie jest zdefiniowana. Mając do czynienia z danymi czasowymi, możesz chcieć opisać oczekiwaną dokładność w bazie danych. Dane czasowe mogą mieć dokładność DATE, TIME lub TIMESTAMP (tj. Rzeczywista data, tylko godzina lub jedno i drugie). Użyj adnotacji @Temporal, aby to dostroić.
Co to temporal precision of time is not defined
znaczy? Czym są temporal
dane i ich dokładność? Jak to dostroić?
Odpowiedzi:
Ta adnotacja musi być określona dla trwałych pól lub właściwości typu
java.util.Date
ijava.util.Calendar
. Można go określić tylko dla pól lub właściwości tego typu.Temporal
Adnotacji mogą być stosowane w połączeniu zBasic
przypisaniem, doId
opisywania, lubElementCollection
adnotacją (gdy wartość element pobierający jest takiego typu, w czasie.W zwykłych interfejsach API języka Java czasowa precyzja czasu nie jest zdefiniowana. W przypadku danych czasowych możesz chcieć opisać oczekiwaną dokładność w bazie danych. Dane czasowe mogą mieć dokładność DATE, TIME lub TIMESTAMP (tj. Rzeczywista data, tylko godzina lub jedno i drugie). Użyj
@Temporal
adnotacji, aby to dostosować.Dane czasowe to dane dotyczące czasu. Na przykład w systemie zarządzania treścią data utworzenia i data ostatniej aktualizacji artykułu są danymi czasowymi. W niektórych przypadkach dane czasowe wymagają precyzji i chcesz przechowywać dokładną datę / godzinę lub obie te wartości (
TIMESTAMP
) w tabeli bazy danych.Precyzja czasowa nie jest określona w podstawowych interfejsach API języka Java.
@Temporal
toJPA
adnotacja, która jest konwertowana między znacznikami czasu ijava.util.Date
. To także przekształca siętime-stamp
w czas. Na przykład w poniższym fragmencie@Temporal(TemporalType.DATE)
zmniejsza wartość czasu i zachowuje tylko datę .Zgodnie z javadocs,
[Powyższe informacje zebrane z różnych źródeł]
źródło
yyyy-MM-dd
02/10/2017
i chcę przekonwertować to na2017-10-02
or2017/10/02
@Temporal
to adnotacja JPA, której można użyć do przechowywania w tabeli bazy danych następujących elementów kolumny:java.sql.Date
)java.sql.Time
)java.sql.Timestamp
)Generalnie, gdy deklarujemy
Date
pole w klasie i próbujemy je przechowywać.Będzie przechowywany jako TIMESTAMP w bazie danych.
Powyższy kod przechowuje wartość wyglądającą jak 08-07-17 04: 33: 35.870000000 PM
Jeśli chcemy przechowywać w bazie tylko DATĘ ,
możemy użyć / zdefiniować
TemporalType
.Tym razem zapisze 08-07-17 w bazie danych
Istnieją również inne atrybuty,
@Temporal
których można użyć w zależności od wymagań.źródło
Typy czasowe to zestaw typów opartych na czasie, których można używać w trwałych mapowaniach stanu.
Listę obsługiwanych rodzajów czasowych obejmuje trzy
java.sql
typyjava.sql.Date
,java.sql.Time
ijava.sql.Timestamp
, i obejmuje dwajava.util
typyjava.util.Date
ajava.util.Calendar
.Te
java.sql
typy są całkowicie bezproblemowe. Działają jak każdy inny prosty typ mapowania i nie wymagają specjalnego rozważania.Te dwa
java.util
typy wymagają jednak dodatkowych metadanych, aby wskazać, który zjava.sql
typów JDBC ma być używany podczas komunikacji ze sterownikiem JDBC. Odbywa się to poprzez dodanie do nich@Temporal
adnotacji i określenie typu JDBC jako wartościTemporalType
typu wyliczeniowego.Istnieją trzy wyliczone wartości DATE, TIME i TIMESTAMP, które reprezentują każdy z
java.sql
typów.źródło
Użyj tego
źródło
Jeśli szukasz krótkiej odpowiedzi:
W przypadku korzystania z java.util.Date, Java tak naprawdę nie wie, jak bezpośrednio odnosić się do typów SQL. To wtedy
@Temporal
wchodzi do gry. Służy do określenia żądanego typu SQL.Źródło: Baeldung
źródło
Używam Hibernate 5.2 i
@Temporal
nie jest już wymagane.java.util.date , sql.date , time.LocalDate są przechowywane w bazie danych z odpowiednim typem danych, jak data / znacznik czasu.
źródło
Używamy adnotacji @Temporal do wstawiania daty, godziny lub obu w tabeli bazy danych. Używając TemporalType możemy wstawić dane, czas lub obie int tabeli.
źródło