【问题标题】:retrieve TIMESTAMP检索 TIMESTAMP
【发布时间】:2012-02-27 15:06:27
【问题描述】:

我有一个带有 TIMESTAMP 列的实体。当我使用 EntityManager 在我的数据库中保留一个新条目时,我可以在我的表中看到正确设置的新行,但是如果我尝试使用preparedQuery 检索此实体,我会返回一个带有 TIMESTAMP 属性 Null 的实体,而它在表中不为空。

@Basic(optional =     false)
@NotNull
@Column(name = "devis_date_crea", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date devisDateCrea;

注意:直到我在持久化上下文中将验证模式设置为 null 之前,persist 方法会引发 EJBCallBackException。

【问题讨论】:

  • 你可以发布你准备好的查询代码

标签: timestamp ejb temporal


【解决方案1】:

我不确定你是否知道,但 SQL 时间戳实际上不包含任何时间或日期。

时间戳是一种数据类型,它公开自动生成的二进制数,保证在数据库中是唯一的。时间戳通常用作对表行进行版本标记的机制。存储大小为 8 个字节。

如果你需要日期时间,你应该使用日期时间类型。 如果您需要在每次创建和更新时更改它,您可以使用默认值创建并触发更新。

更多信息 http://msdn.microsoft.com/en-us/library/aa260631(v=sql.80).aspx

【讨论】:

  • 谢谢,我以为时间戳会自动设置字段中的当前时间。
  • 我不确定这是否真的是我的问题。我得到了正确的结果,并且当坚持时,当前时间设置在行字段中。如果我重新启动我的应用程序,一个检索查询给我完整的表数据,日期属性不为空。只有当我坚持一个实体并尝试检索它时,我才能获得一个 Date 空值。 :s 我认为这更像是一个持久性问题而不是数据特征。我使用 MySQL 和 Glassfish 以及 TopLink 和 EJB
  • 表中默认值为CURRENT_TIMESTAMP
  • 是的,如果您也需要时间信息,可能是 DATETIME。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 2013-07-07
  • 2021-02-13
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多