zoukankan      html  css  js  c++  java
  • Hibernate详解一(领域模型)

    1.简单类型

    1.1 简单类型

    1.1.1 映射Date/Time值

    SQL 标准定义了三种日期/时间类型:DATE、TIME、TIMESTAMP,分别对应Java中的java.sql.Date、java.sql.Time和java.sql.Timestamp。

    为了避免对 java.sql 包的依赖,通常使用 java.util 或 java.time Date/Time 类而不是 java.sql.Timestamp 和 java.sql.Time 类。

    虽然 java.sql 类定义了与 SQL 日期/时间数据类型的直接关联,但 java.util 或 java.time 属性需要使用 @Temporal 注释显式标记 SQL 类型关联。这样,java.util.Date 或 java.util.Calendar 可以映射到 SQL DATE、TIME 或 TIMESTAMP 类型。

    (1)使用java.util.Date映射DATE

    import javax.persistence.*;
    import java.util.Date;
    
    /**
     * @Author: wwy
     * @Date: 2021/9/10 9:54
     */
    @Entity(name = "DateEvent")
    public class DateEvent {
    
        @Id
        @GeneratedValue
        private Long id;
    
        @Column(name = "`timestamp`")
        @Temporal(TemporalType.DATE)
        private Date timestamp;
    
        //Getters and setters are omitted for brevity
    
    }

    当执行持久化操作时:

    DateEvent dateEvent = new DateEvent( new Date() );
    entityManager.persist( dateEvent );

    Hibernate 生成以下 INSERT 语句:

    INSERT INTO DateEvent ( timestamp, id ) VALUES ( '2015-12-29', 1 )

    如果我们将@Temporal 类型更改为 TIME:

    @Column(name = "`timestamp`")
    @Temporal(TemporalType.TIME)
    private Date timestamp;

    Hibernate 将发出一个包含小时、分钟和秒的 INSERT 语句:

    INSERT INTO DateEvent ( timestamp, id ) VALUES ( '16:51:58', 1 )

    当@Temporal 类型设置为 TIMESTAMP 时:

    @Column(name = "`timestamp`")
    @Temporal(TemporalType.TIMESTAMP)
    private Date timestamp;

    Hibernate 将在 INSERT 语句中包含 DATE、TIME 和纳秒:

    INSERT INTO DateEvent ( timestamp, id ) VALUES ( '2015-12-29 16:54:04.544', 1 )

    1.1.2 映射 Java 8 Date/Time值

    标准 SQL 日期/时间类型与受支持的 Java 8 日期/时间类类型之间的映射如下所示:

    DATE:java.time.LocalDate

    TIME:java.time.LocalTimejava.time.OffsetTime

    TIMESTAMP:java.time.Instantjava.time.LocalDateTimejava.time.OffsetDateTime 和 java.time.ZonedDateTime

    因为 Java 8 日期/时间类和 SQL 类型之间的映射是隐式的,所以不需要指定 @Temporal 注释。否则会报异常。

    使用特定时区:

    当未指定时区时,JDBC 驱动程序将使用底层 JVM 默认时区,如果应用程序在全球范围内使用,这可能不合适。因此,每当从数据库保存/加载数据时,使用单一参考时区(例如 UTC)是很常见的。

    一种替代方法是将所有 JVM 配置为使用参考时区:

    声明式:java -Duser.timezone=UTC ...

    编程方式:TimeZone.setDefault( TimeZone.getTimeZone( "UTC" ) );

  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/wuwuyong/p/15250811.html
Copyright © 2011-2022 走看看