簡體   English   中英

不支持從 DATE 到 java.lang.Integer 的轉換

[英]Unsupported conversion from DATE to java.lang.Integer

因此,我使用 Java Ebean 庫生成了以下 model:

package models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.time.LocalDateTime;

@Entity
@Table(name = "Zeit")
public class Zeit extends BaseModel {

    @Column
    private LocalDateTime start;

    @Column
    private LocalDateTime ende;

    @Column
    private int pause;

    @ManyToOne(optional = false)
    private Benutzer benutzer;

    @Column
    private LocalDateTime pauseStart;

    public Zeit() {
    }

    public Zeit(LocalDateTime start, LocalDateTime ende, int pause, LocalDateTime pauseStart) {
        this.start = start;
        this.ende = ende;
        this.pause = pause;
        this.pauseStart = pauseStart;
    }

    public LocalDateTime getStart() {
        return start;
    }

    public void setStart(LocalDateTime start) {
        this.start = start;
    }

    public LocalDateTime getEnde() {
        return ende;
    }

    public void setEnde(LocalDateTime ende) {
        this.ende = ende;
    }

    public int getPause() {
        return pause;
    }

    public void setPause(int pause) {
        this.pause = pause;
    }

    public Benutzer getBenutzer() {
        return benutzer;
    }

    public void setBenutzer(Benutzer benutzer) {
        this.benutzer = benutzer;
    }

    public LocalDateTime getPauseStart() {
        return pauseStart;
    }

    public void setPauseStart(LocalDateTime pauseStart) {
        this.pauseStart = pauseStart;
    }
}

這導致這些 SQL 語句:

create table zeit (
  id                            bigint auto_increment not null,
  start                         datetime(6),
  ende                          datetime(6),
  pause                         integer not null,
  version                       bigint not null,
  when_created                  datetime(6) not null,
  when_modified                 datetime(6) not null,
  constraint pk_zeit primary key (id)
);

這個想法是我想將打開和關閉時間寫到數據庫中。 這基本上可以通過使用

private void btn_anmeldenActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        Zeit z = new Zeit();
        z.setStart(LocalDateTime.now());
        z.setBenutzer(benutzer);
        z.save();
        btn_anmelden.setText(String.valueOf(z.getStart()));
        btn_anmelden.setEnabled(false);
    } catch (Exception e) {

    }
}

但是當使用以下方法從數據庫中取回實體時:

private void initState() {
    Zeit lastTime = new QZeit().findList().get(0);

    System.out.println(lastTime);
}

我得到錯誤:

com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from TIMESTAMP to java.lang.Integer

到目前為止,我試圖

  • 更改數據庫中的不同數據類型
  • 在我的代碼中使用不同的類型( java.util.Datejava.sql.Date ,...)

我也在使用

  • mysql-connector-java :8.0.19
  • io.ebean :12.1.8

錯誤的數據類型

MySQL 中的DATETIME數據類型表示日期和時間,但缺少任何時區或偏移量的概念。 所以這種類型不能代表一個時刻,不是時間軸上的一個點。

與此類型等效的標准 SQL 是TIMESTAMP WITHOUT TIME ZONE Java 中的等效項是LocalDateTime

在此處輸入圖像描述

要在標准 SQL 中記錄時刻,請使用TIMESTAMP WITH TIME ZONE 在 MySQL 中, TIMESTAMP 在 Java、 InstantOffsetDateTimeZonedDateTime中,JDBC 4.2 及更高版本需要對OffsetDateTime的支持,而對其他兩個的支持是可選的。

OffsetDateTime odt = OffsetDateTime.now() ;
myPreparedStatement.setObject( … , odt ) ;  // Writing to a column of MySQL type `TIMESTAMP`, standard SQL `TIMESTAMP WIH TIME ZONE`.

恢復。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

至於 ebean 錯誤,您沒有提供足夠的詳細信息。 我們需要查看它試圖實例化的 Java class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM