【问题标题】:@Version breaks in Web Project@Version 在 Web 项目中中断
【发布时间】:2017-05-09 14:01:58
【问题描述】:

我们正在使用源链接将生成的休眠 bean 包含在 eclipse 中的 j2ee Web 项目中。我们有一个包含的项目,其中包括各种实用程序和服务以及主项目之外的此类项目。

当我们将 bean 导入实用程序项目时,bean 导入正常。他们有hibernate 4.3和hibernate-jpa 2.1 jar。但是,当我将相同的模型 bean 导入主项目时,@Version 注释会出现编译错误。它说:

JSR 220:Java Persistence API,9.1.17:版本属性仅支持以下类型:int、Integer、short、Short、long、Long、Timestamp。

代码是:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDT_TMSTMP", nullable = false)
@Version 
private Date updateTimestamp;

正如我所说,导入到一个简单的 java 项目时效果很好,但是当导入到一个 web 模块(我们尝试了几个)时,它会出现这个错误。错误文本似乎是说我们不能使用 java.util.Date 作为属性类型,但同样,我们之前在导入实用程序项目时使用它。

我们无法解释为什么实用程序项目与 Web 模块之间的区别。我们有点希望在 web 模块中使用它,因为我们希望能够在不多次导入相同的模型 bean 的情况下移动这些实用程序模块。

有什么想法吗?即使是调查途径也会比我们现在拥有的更好。我们正在罢工。

【问题讨论】:

  • 您确定这是编译错误,而不是来自 Eclipse 插件(如 JPA 插件)的错误吗? Java 编译器并不关心带有注解的字段的类型。所以很可能错误来自 JPA 集成插件,这可能是由错误配置的构建路径引起的(即,如果 JPA 设置为其他项目中的旧版本)。
  • 您是否尝试使用 java.sql.Date 而不是 java.util.Date?您还可以检查您的数据库是否配置为以毫秒精度存储时间戳。
  • 也可以尝试使用java.sql.Timestamp

标签: java eclipse hibernate jpa jakarta-ee


【解决方案1】:

请使用时间戳。有些国家有DST(从我的观点来看是一个愚蠢的想法)。在这个国家/地区,日期可以存在、可以重复或从不存在。 Timestamp 没有这样的例外,并且作为 SSOT 更好。

顺便说一句:如果您有一个移动的服务器(在飞机、汽车或潜艇上,可能有一天会更改时区)本地化的 TimestampZ 可能会更好。

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多