代码之家  ›  专栏  ›  技术社区  ›  Vy Do

PostgreSQL时间带时区的JPA映射的Java数据类型是什么?

  •  0
  • Vy Do  · 技术社区  · 5 年前

    2.3.4.RELEASE ,FreeMarker,PostgreSQL 13。

    PostgreSQL时间带时区的JPA映射的Java数据类型是什么?

    文件 application.properties

    spring.datasource.hikari.connectionTimeout=20000
    spring.datasource.hikari.maximumPoolSize=5
    spring.datasource.url=jdbc:postgresql://localhost:5432/freemarker
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    
    # create-drop
    spring.jpa.hibernate.ddl-auto=update
    
    # Hibernate properties
    # https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/dialect/PostgreSQL95Dialect.html
    spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect
    spring.jpa.show-sql =true
    #spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
    spring.jpa.properties.hibernate.format_sql=true
    
    spring.freemarker.template-loader-path=classpath:/templates
    spring.freemarker.suffix=.ftlh
    

    CREATE TABLE public.inventory_item
    (
        id integer,
        inventory_item_name character varying(1024) NOT NULL,
        manufactor_id integer,
        created time with time zone,
        modified time with time zone,
        user_created integer,
        user_modified integer,
        inventory_item_type_id integer,
        original_price numeric(222),
        PRIMARY KEY (id)
    );
    
    ALTER TABLE public.inventory_item
        OWNER to postgres;
    

    此实体映射在处导致错误 created modified

    package com.example.demo.entity;
    
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.math.BigInteger;
    import java.util.Date;
    import java.util.Objects;
    
    @Entity
    @Table(name = "inventory_item", schema = "public", catalog = "freemarker")
    public class InventoryItem {
    
        private Integer id;
        private String inventoryItemName;
        private Integer manufactorId;
        private Date created;
        private Date modified;
        private Integer userCreated;
        private Integer userModified;
        private Integer inventoryItemTypeId;
        private BigInteger originalPrice;
    
        @Id
        @Column(name = "id")
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        @Basic
        @Column(name = "inventory_item_name")
        public String getInventoryItemName() {
            return inventoryItemName;
        }
    
        public void setInventoryItemName(String inventoryItemName) {
            this.inventoryItemName = inventoryItemName;
        }
    
        @Basic
        @Column(name = "manufactor_id")
        public Integer getManufactorId() {
            return manufactorId;
        }
    
        public void setManufactorId(Integer manufactorId) {
            this.manufactorId = manufactorId;
        }
    
        @Basic
        @Column(name = "created")
        public Date getCreated() {
            return created;
        }
    
        public void setCreated(Date created) {
            this.created = created;
        }
    
        @Basic
        @Column(name = "modified")
        public Date getModified() {
            return modified;
        }
    
        public void setModified(Date modified) {
            this.modified = modified;
        }
    
        @Basic
        @Column(name = "user_created")
        public Integer getUserCreated() {
            return userCreated;
        }
    
        public void setUserCreated(Integer userCreated) {
            this.userCreated = userCreated;
        }
    
        @Basic
        @Column(name = "user_modified")
        public Integer getUserModified() {
            return userModified;
        }
    
        public void setUserModified(Integer userModified) {
            this.userModified = userModified;
        }
    
        @Basic
        @Column(name = "inventory_item_type_id")
        public Integer getInventoryItemTypeId() {
            return inventoryItemTypeId;
        }
    
        public void setInventoryItemTypeId(Integer inventoryItemTypeId) {
            this.inventoryItemTypeId = inventoryItemTypeId;
        }
    
        @Basic
        @Column(name = "original_price")
        public BigInteger getOriginalPrice() {
            return originalPrice;
        }
    
        public void setOriginalPrice(BigInteger originalPrice) {
            this.originalPrice = originalPrice;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            InventoryItem that = (InventoryItem) o;
            return Objects.equals(id, that.id) &&
                    Objects.equals(inventoryItemName, that.inventoryItemName) &&
                    Objects.equals(manufactorId, that.manufactorId) &&
                    Objects.equals(created, that.created) &&
                    Objects.equals(modified, that.modified) &&
                    Objects.equals(userCreated, that.userCreated) &&
                    Objects.equals(userModified, that.userModified) &&
                    Objects.equals(inventoryItemTypeId, that.inventoryItemTypeId) &&
                    Objects.equals(originalPrice, that.originalPrice);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(id, inventoryItemName, manufactorId, created, modified, userCreated, userModified, inventoryItemTypeId, originalPrice);
        }
    }
    
    

    enter image description here

        created time with time zone,
        modified time with time zone,
    

        private Date created;
        private Date modified;
    

    2 回复  |  直到 5 年前
        1
  •  4
  •   Andreas dfa    5 年前

    根据PostgreSQL文档,第节 8.5. Date/Time Types , time with time zone 商店:

    一天中的时间( ),带时区。

    在Java中,最好的匹配是 OffsetTime

    在ISO-8601日历系统中,与UTC/Greenwich有偏移量的时间,例如 10:15:30+01:00 .

    休息时间 "13:45.30.123456789+02:00" 可以存储在 .

    但是,请注意PostgreSQL文档指出:

    我们 不推荐 时区时间

        2
  •  0
  •   Mahesh_Loya    5 年前

    试试ZonedDateTime

    private Integer id;
    private String inventoryItemName;
    private Integer manufactorId;
    private ZonedDateTime created;
    private ZonedDateTime modified;
    private Integer userCreated;
    private Integer userModified;
    private Integer inventoryItemTypeId;
    private BigInteger originalPrice;
    
    @Id
    @Column(name = "id")
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    @Basic
    @Column(name = "inventory_item_name")
    public String getInventoryItemName() {
        return inventoryItemName;
    }
    
    public void setInventoryItemName(String inventoryItemName) {
        this.inventoryItemName = inventoryItemName;
    }
    
    @Basic
    @Column(name = "manufactor_id")
    public Integer getManufactorId() {
        return manufactorId;
    }
    
    public void setManufactorId(Integer manufactorId) {
        this.manufactorId = manufactorId;
    }
    
    @Basic
    @Column(name = "created")
    public ZonedDateTime getCreated() {
        return created;
    }
    
    public void setCreated(ZonedDateTime created) {
        this.created = created;
    }
    
    @Basic
    @Column(name = "modified")
    public ZonedDateTime getModified() {
        return modified;
    }