What is the use of the @Temporal annotation in Hibernate?

前端 未结 7 925
北海茫月
北海茫月 2020-11-30 18:06

The Hibernate Documentation has the information below for the @Temporal annotation:

In plain Java APIs, the temporal precision of time is

相关标签:
7条回答
  • 2020-11-30 18:20

    We use @Temporal annotation to insert date, time or both in database table.Using TemporalType we can insert data, time or both int table.

    @Temporal(TemporalType.DATE) // insert date
    @Temporal(TemporalType.TIME) // insert time
    @Temporal(TemporalType.TIMESTAMP) // insert  both time and date.
    
    0 讨论(0)
  • 2020-11-30 18:23

    This annotation must be specified for persistent fields or properties of type java.util.Date and java.util.Calendar. It may only be specified for fields or properties of these types.

    The Temporal annotation may be used in conjunction with the Basic annotation, the Id annotation, or the ElementCollection annotation (when the element collection value is of such a temporal type.

    In plain Java APIs, the temporal precision of time is not defined. When dealing with temporal data, you might want to describe the expected precision in database. Temporal data can have DATE, TIME, or TIMESTAMP precision (i.e., the actual date, only the time, or both). Use the @Temporal annotation to fine tune that.

    The temporal data is the data related to time. For example, in a content management system, the creation-date and last-updated date of an article are temporal data. In some cases, temporal data needs precision and you want to store precise date/time or both (TIMESTAMP) in database table.

    The temporal precision is not specified in core Java APIs. @Temporal is a JPA annotation that converts back and forth between timestamp and java.util.Date. It also converts time-stamp into time. For example, in the snippet below, @Temporal(TemporalType.DATE) drops the time value and only preserves the date.

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

    As per javadocs,

    Annotation to declare an appropriate {@code TemporalType} on query method parameters. Note that this annotation can only be used on parameters of type {@link Date} with default TemporalType.DATE

    [Information above collected from various sources]

    0 讨论(0)
  • 2020-11-30 18:26

    I use Hibernate 5.2 and @Temporal is not required anymore.
    java.util.date, sql.date, time.LocalDate are stored into DB with appropriate datatype as Date/timestamp.

    0 讨论(0)
  • 2020-11-30 18:38

    @Temporal is a JPA annotation which can be used to store in the database table on of the following column items:

    1. DATE (java.sql.Date)
    2. TIME (java.sql.Time)
    3. TIMESTAMP (java.sql.Timestamp)

    Generally when we declare a Date field in the class and try to store it.
    It will store as TIMESTAMP in the database.

    @Temporal
    private Date joinedDate;
    

    Above code will store value looks like 08-07-17 04:33:35.870000000 PM

    If we want to store only the DATE in the database,
    We can use/define TemporalType.

    @Temporal(TemporalType.DATE)
    private Date joinedDate;
    

    This time, it would store 08-07-17 in database

    There are some other attributes as well as @Temporal which can be used based on the requirement.

    0 讨论(0)
  • 2020-11-30 18:40

    Temporal types are the set of time-based types that can be used in persistent state mappings.

    The list of supported temporal types includes the three java.sql types java.sql.Date, java.sql.Time, and java.sql.Timestamp, and it includes the two java.util types java.util.Date and java.util.Calendar.

    The java.sql types are completely hassle-free. They act just like any other simple mapping type and do not need any special consideration.

    The two java.util types need additional metadata, however, to indicate which of the JDBC java.sql types to use when communicating with the JDBC driver. This is done by annotating them with the @Temporal annotation and specifying the JDBC type as a value of the TemporalType enumerated type.

    There are three enumerated values of DATE, TIME, and TIMESTAMP to represent each of the java.sql types.

    0 讨论(0)
  • 2020-11-30 18:40

    If you're looking for short answer:

    In the case of using java.util.Date, Java doesn't really know how to directly relate to SQL types. This is when @Temporal comes into play. It's used to specify the desired SQL type.

    Source: Baeldung

    0 讨论(0)
提交回复
热议问题