【问题标题】:Oracle Timestamp/Date mapping problem with hibernateOracle 时间戳/日期映射问题与休眠
【发布时间】:2020-05-15 15:12:03
【问题描述】:

映射我的表时遇到问题。我正在使用 Oracle DB,我的表 ->> test_time 正在使用 2 列(最初我只想存储日期,因此使用了 Date 但没有工作)在表中使用 Timestamp 类型。 下面是我的 Model 类,我在 oracle 中使用 Date 类型时尝试过 java.sql.Date 类,但没有成功。现在我正在使用 java.util.Date 类,因为我在 Oracle 中使用 Timestamp,它仍然无法正常工作。无法理解,我应该怎么做才能让它发挥作用。



import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@Entity
@Table(name = "test_time ")
public class TestTime 
{


    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="CUST_SEQ1")
    @SequenceGenerator(sequenceName = "edu_id", allocationSize = 1, name = "CUST_SEQ1")
    private int edu_id;


    @JsonSerialize(as = Date.class)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
    @Temporal(TemporalType.DATE)
    private Date batch_start_year;

    @JsonSerialize(as = Date.class)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
    @Temporal(TemporalType.DATE)
    private Date batch_end_year;


    public int getEdu_id() {
        return edu_id;
    }

    public void setEdu_id(int edu_id) {
        this.edu_id = edu_id;
    }

    public Date getBatch_start_year() {
        return batch_start_year;
    }

    public void setBatch_start_year(Date batch_start_year) 
    {
        this.batch_start_year = batch_start_year;
    }

    public Date getBatch_end_year() {
        return batch_end_year;
    }

    public void setBatch_end_year(Date batch_end_year) {
        this.batch_end_year = batch_end_year;
    }

}

我在表格中添加了一个数据,以检查获取方法。它既不是插入任何东西,也不是从表中获取任何东西。

【问题讨论】:

    标签: java spring oracle hibernate jpa


    【解决方案1】:

    您可以尝试使用 Joda-Time 库。 Download it from maven repo.

    你必须更新你的两个日期列如下:

    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    @DateTimeFormat(pattern = "dd-MM-yyyy")
    private DateTime batch_start_year;
    
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    @DateTimeFormat(pattern = "dd-MM-yyyy")
    private DateTime batch_end_year;
    

    这里DateTime 应该是org.joda.time.DateTime

    【讨论】:

    • 感谢您的回复,我以同样的方式使用,它给了我在“org.jadira.usertype.dateandtime.joda.PersistentDateTime”上找不到类错误,当我添加了以下依赖项时相同: org.jadira.usertypeusertype.extended3.2.0.GA 它给了我另一个错误: Caused by: java.lang.AbstractMethodError
    • 你能用这两个版本再试一次吗:mvnrepository.com/artifact/org.jadira.usertype/usertype.core/…mvnrepository.com/artifact/joda-time/joda-time/2.9.9。添加这两个依赖项。
    • 感谢 Anuradha,错误发生了,但不知何故,当我使用这个 Jadira 库时,我的后映射方法不起作用。就像它不从服务器调用一样。否则它正在工作。我请求的 URL 是正确的。
    • 太棒了。但是由于 Jadira 库,不可能发布映射不起作用。
    • 这可能对你有帮助:stackoverflow.com/questions/41880292/…
    【解决方案2】:

    我在 DB 中的 startDate 和 endDate 是 Timestamp 数据类型,在我的 Model 类中也是如此。 一个人真的不必使用不同的库。对我来说,它与 java.sql.Timestamp 类一起使用(因为我使用 Oracle7 jar 用于 oracle 12 c),您也可以根据您的要求使用 joda time 或 java.util.Date。 对我来说,它没有显示数据库中的更改,因为我没有提交我的更改。所以我添加了 session.flush(); 你可以添加 commit()/flush() 或者你可以添加 hibernate 属性。

    模型类

    
    import javax.persistence.Basic;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.SequenceGenerator;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    import com.fasterxml.jackson.databind.annotation.JsonSerialize;
    
    @Entity
    @Table(name = "test_time ")
    public class TestTime 
    {
    
    
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="CUST_SEQ1")
        @SequenceGenerator(sequenceName = "edu_id", allocationSize = 1, name = "CUST_SEQ1")
        private int edu_id;
    
    
      @JsonSerialize(as = Timestamp.class)
        @JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "dd-MMM-yyyy")
        private Timestampbatch_start_year;
    
        @JsonSerialize(as = Timestamp.class)
        @JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "dd-MMM-yyyy")
        private Timestampbatch_end_year;
    
    
        public int getEdu_id() {
            return edu_id;
        }
    
        public void setEdu_id(int edu_id) {
            this.edu_id = edu_id;
        }
    
        public Timestamp getBatch_start_year() {
            return batch_start_year;
        }
    
        public void setBatch_start_year(Timestamp batch_start_year) 
        {
            this.batch_start_year = batch_start_year;
        }
    
        public Timestamp getBatch_end_year() {
            return batch_end_year;
        }
    
        public void setBatch_end_year(Timestamp batch_end_year) {
            this.batch_end_year = batch_end_year;
        }
    
    } ```
    
    
    
    And when I am inserting date into DB:
    
    ```sessionFactory.getCurrentSession().save(user_edu);
    
                sessionFactory.getCurrentSession().flush();
    
                return user_edu.getEdu_id(); ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2012-10-22
      相关资源
      最近更新 更多