不支持从日期到java.lang.Integer的转换
因此,我使用Java Ebean库生成了以下模型:不支持从日期到java.lang.Integer的转换,java,mysql,ebean,Java,Mysql,Ebean,因此,我使用Java Ebean库生成了以下模型: 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 cla
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)
);
我的想法是,我想在db中写下开始和结束时间。这基本上可以通过使用
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.Date
,…)java.sql.Date
:8.0.19mysql连接器java
:12.1.8io.ebean
DATETIME
数据类型表示一天中的日期和时间,但缺少时区或偏移量的概念。所以这种类型不能代表一个时刻,不是时间线上的一个点
这种类型的标准SQL等价物是不带时区的时间戳。Java中的等价物是LocalDateTime
要在标准SQL中记录一个时刻,请使用带时区的时间戳。在MySQL中,时间戳
。在Java中,Instant
、OffsetDateTime
和zoneDateTime
,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类。不要添加不相关的标记。通过应用程序。可能有一个图形用户界面,从问题中可以清楚地看出,这个问题与Swing无关。@basil bourque我不知道你为什么要结束这个问题。你给我的回复甚至没有提到我面临的问题。不管怎样,我会去别的地方看看。你说得对,我的问题不太接近。重新打开。这是非常好的信息(+1)。这似乎没有解释提问者似乎与Ebean之间存在的问题。谢谢你的回答,我已经提供了关于这个问题的更多信息。尽管看起来即使使用
LocalDateTIme
也有同样的问题。@AienSaidi再次强调,LocalDateTIme
是完全错误的数据类型。再看一遍我的答案,还是一样。无论如何,我得换个型号。谢谢