【问题标题】:JPA HSQLDB TIMESTAMP ConversionJPA HSQLDB TIMESTAMP 转换
【发布时间】:2016-09-03 00:06:44
【问题描述】:

在我们的项目中,我们使用 JPA 2.1、hibernate 5.1、Spring 2.4.6、hsqldb 2.3.2。我们的 hsql 查询有问题,它给我们本地日期时间转换错误。这是错误: 转换中不兼容的数据类型:从 SQL 类型 TIMESTAMP 到 [B,值:org.hsqldb.types.TimestampData 的实例。这是完整的堆栈跟踪: http://pastebin.com/bhGGpvNS

package calendar.model;

import java.io.Serializable;
import java.time.LocalDateTime;

import javax.persistence.Basic;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import calendar.converter.LocalDateTimeAttributeConverter;

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

    private static final long serialVersionUID = 1L;

    private Integer eventId;
    private Integer creatorAccountId;
    private String eventName;
    private String eventStreetAddress;
    private String eventCity;
    private String eventState;

    @Convert(converter = LocalDateTimeAttributeConverter.class)
    private LocalDateTime eventTime;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getEventId() {
        return eventId;
    }

    public void setEventId(Integer eventId) {
        this.eventId = eventId;
    }

    @Basic(optional = false)
    public Integer getCreatorAccountId() {
        return creatorAccountId;
    }

    public void setCreatorAccountId(Integer creatorAccountId) {
        this.creatorAccountId = creatorAccountId;
    }

    @Basic(optional = false)
    public String getEventName() {
        return eventName;
    }

    public void setEventName(String eventName) {
        this.eventName = eventName;
    }

    @Basic(optional = false)
    public String getEventStreetAddress() {
        return eventStreetAddress;
    }

    public void setEventStreetAddress(String eventStreetAddress) {
        this.eventStreetAddress = eventStreetAddress;
    }

    @Basic(optional = false)
    public String getEventCity() {
        return eventCity;
    }

    public void setEventCity(String eventCity) {
        this.eventCity = eventCity;
    }

    @Basic(optional = false)
    public String getEventState() {
        return eventState;
    }

    public void setEventState(String eventState) {
        this.eventState = eventState;
    }

    @Basic(optional = false)
    public LocalDateTime getEventTime() {
        return eventTime;
    }

    public void setEventTime(LocalDateTime eventTime) {
        this.eventTime = eventTime;
    }

    public Event(){}

    public Event(Integer accountId, String name,String streetAddress, String city, String state, LocalDateTime time)
    {
        this.creatorAccountId = accountId;
        this.eventName = name;
        this.eventCity = city;
        this.eventState = state;
        this.eventStreetAddress = streetAddress;
        this.eventTime = time;
    }

    public int compareTo(Event o) {
        // TODO Auto-generated method stub
        return this.getEventTime().compareTo(o.getEventTime());
    }

}

【问题讨论】:

  • 您传递的不是预期的日期或时间戳。发布您的代码,我很乐意为您修复它。
  • 非常感谢先生!如果您能帮助我们解决这个问题,您将挽救我们的生命。我已经为我们的实体发布了代码。
  • 请看我的回答

标签: hibernate jpa hsqldb


【解决方案1】:

我不确定 Java 8 日期时间支持是否已添加到 Hibernate 核心模块中。目前,我相信您还需要在您的项目中添加以下依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.1.0.Final</version>
</dependency>

以上内容应该消除了为 java 8 Date/Time 类编写自己的 AttributeConverters 的需要。

【讨论】:

    【解决方案2】:

    Hibernate 不support the LocalDateTime class。我建议您使用joda 或带有Date.from() and friends 的内置Java 日期/日历矩阵。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 2020-05-18
      • 2022-01-02
      • 2015-04-20
      • 1970-01-01
      相关资源
      最近更新 更多