-1

我正在使用 Spring JPA 并将以下实体映射到 H2 数据库字段:

@Entity
@Table(name = "REQUEST")
public class Request implements Serializable {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "CORR_ID")
    private String corrId;


    @Column(name = "CB_DATE")
    private LocalDate cbDate;


    @Column(name = "ACTIVE")
    private boolean active;

    @Column(name = "CREATED_DATE")
    private LocalDate createdDate;

    @Column(name = "LAST_UPDATED")
    private LocalDateTime lastUpdated;

}

-- H2 DB Script
CREATE TABLE REQUEST
(

    ID            BIGINT AUTO_INCREMENT PRIMARY KEY,
    CORR_ID       CHAR(36)              NOT NULL,
    CB_DATE       DATE                  NOT NULL,
    ACTIVE        BOOLEAN DEFAULT FALSE NOT NULL,
    CREATED_DATE  DATE                  NOT NULL,
    LAST_UPDATED  DATETIME              NOT NULL
);

我不确定以下 SQL Server 列定义是否会正确映射到 Java。我已经看到BIT映射到booleanjava 类型,但是,我不确定Date&DateTime将分别正确映射到LocalDate& LocalDateTime

--MS SQL SEVER SCRIPT
CREATE TABLE REQUEST
(

    ID            BIGINT AUTO_INCREMENT PRIMARY KEY,
    CORR_ID       CHAR(36)              NOT NULL,
    CB_DATE       DATE                  NOT NULL,
    ACTIVE        BIT DEFAULT FALSE NOT NULL,
    CREATED_DATE  DATE                  NOT NULL,
    LAST_UPDATED  DATETIME              NOT NULL
);

对此的一些澄清将不胜感激。我需要对我的 Java 代码进行任何调整吗?我的 SQL 服务器定义正常吗?

我在使用 JPA 保存之前进行转换:

re.setIsActive(tt.isActive());
re.setCbDate(LocalDate.parse(tt.getCobDate()));
re.setCreatedDate(LocalDate.now());
4

1 回答 1

0

我猜 SQL Server 本身的版本、SQL Server JDBC 驱动程序和使用的 Hibernate Dialect 在这里起到了确定 SQL Server 端正确或可接受的类型的作用。

变数太多,说不出话来。我会让 Hibernate 创建表并查看它生成的内容。您需要确定必须支持的 SQL Server 版本。基于此,我会选择最好的方言和 JDBC 驱动程序,然后再次查看 Hibernate 将使用此设置生成什么并将其作为正确的类型。

于 2020-07-29T13:24:18.723 回答