【问题标题】:Java Spring - MySQL timestamp field and millisecond precisionJava Spring - MySQL 时间戳字段和毫秒精度
【发布时间】:2015-11-06 05:54:24
【问题描述】:

我正在尝试以毫秒精度在 MySQL 数据库中存储一些时间信息。我要存储的格式是 2015-08-13 10:56:24.570 这样。

问题是,我必须创建具有长度属性的表列(3 或 6,取决于小数部分)。我用 Java Spring Framework 编写的应用程序会自动创建 mysql 表,如果它之前没有创建的话。但我无法设置日期字段的长度属性。

"@Column 注释有长度参数,但它只与字符串字段相当。" Spring Jpa 的文档说。

另一个有趣的部分是我不能使用@Temporal 注释。我的 IDE 给出一个错误“注释@Temporal 不允许用于此位置”。我想知道为什么我也给出了这个错误。

任何帮助对我来说都会很棒。

编辑:我的用于创建 mysql 表的 Java 代码

@Entity
@Table(name = "dbTable")
public class Report
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;


    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "myDate", nullable = false, length = 6)
    private java.util.Date date;

    // Getters Setters etc.

}

【问题讨论】:

  • 您使用的那一列是什么类型的?
  • 并发布实体...
  • 我试过“日期,日期时间,时间戳”。只要我不添加长度属性,它就不会保存小数部分(毫秒)。 @AmitBhati
  • 您是否使用 java.sql 包的 TimeStamp,因为它的默认格式确实考虑了毫秒精度。
  • 问题不是生成毫秒精度格式的时间信息,问题是存储它们。

标签: java mysql spring spring-mvc jpa


【解决方案1】:

制作类型的列

java.sql.Timestamp

同时在 MySQL 中存储时间相关信息。

简单例子:-

  public static void main(String[] args){
    System.out.println(java.sql.Timestamp.valueOf("2013-10-10 10:49:29.12000"));
}

Output:- 2013-10-10 10:49:29.12

Read this,如果有帮助的话。

将列类型从 java.util.Timestamp 更改为 java.sql.Timestamp。

【讨论】:

  • 是的,你绝对是对的,我可以这样创建我的时间信息。但是当我尝试将它存储在 MySQL 数据库中时,会保存“2013-10-10 10:49:29”。
  • 在您的问题中粘贴您插入 MySQL 数据库的实体类。
  • 我认为您需要更改 DB 列数据类型。
【解决方案2】:

我意识到这是一篇旧帖子,但我遇到了同样的问题并想出了一个解决方法。这是我的实体的样子:

@Entity
@Table(name = "ActivityLog")
public class ActivityLogBean {
    @Basic
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date alDateTime;
}

我在“@Temporal(TemporalType.TIMESTAMP)”行收到错误消息“注释@Temporal 不允许用于此位置”。

问题与我正在导入的 Temporal 类有关,我遇到问题时使用的导入语句是:

导入 org.springframework.data.jpa.repository.Temporal;

我将导入更改为以下内容,错误消失了:

导入 javax.persistence.Temporal;

这是我现在的完整工人阶级:

package com.mypackage.beans;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "ActivityLog")
public class ActivityLogBean {
    @Basic
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date alDateTime;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 2020-03-18
    • 2011-12-30
    • 1970-01-01
    • 2023-03-17
    • 2018-03-10
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多