Hibernate逆向工程过程为DateTime生成@Temporal(TemporalType.TIMESTAMP)

时间:2010-04-07 10:20:48

标签: java hibernate jpa

DB中的字段是DATETIME(mysql)类型。

为什么它是作为时间戳生成的,并且会重新生成

在对象持久性期间?在我的情况下,这不是一个理想的场景,

将其视为不是时间戳字段意味着它只应通过setter设置,

不需要生成,我真的不明白为什么它没有生成日期类型!

P.S。 我在mysql JDBC驱动程序中看到的问题是将datetime类型作为TIMESTAMP返回! 如何解决这一切?

4 个答案:

答案 0 :(得分:1)

@Temporal注释表示,带注释的属性是否应映射到java.sql.Date(仅保留日期部分),java.sql.Time(仅保留时间部分)或java.sql.Timestamp(保持日期和时间也是一小部分秒。它与财产价值的产生无关。

答案 1 :(得分:1)

Hibernate中的数据类型

@Temporal(TemporalType.DATE)    = date
@Temporal(TemporalType.TIME)    = hour
@Temporal(TemporalType.TIMESTAMP) =date + hour

Hibernate并不关心数据库或类型,Hibernate只是试图抛出它。 顺便提一下,在OracleBD DATE商店(日期+小时)& TIMESTAMP商店(日期+小时+ ...... milisec)。

如果数据库给你一个时间戳,你应该这样写:

@Temporal(TemporalType.TIMESTAMP)
Date myProp;

http://javahelp.redsaltillo.net

答案 2 :(得分:0)

在不知道hibernate的内部工作原理的情况下,我们将数据库(mysql)中的日期字段设置为date。不是DATETIME。也许这就是它生成时间戳的原因。

您应该考虑将日期表更改为日期,然后您可以更改实体bean并删除@Temporal

在任何情况下,如果不是你想要的那样,从实体bean中删除@Temporal(TemporalType.TIMESTAMP)可能是安全的。

答案 3 :(得分:0)

我想到两种可能性:Hibernate不知道mysql的数据类型“dateTime”或显式映射到 java.sql.Timestamp java.utils.Date <的“dateTime” / strong>(需要 TemporalType.Timestamp 注释)。这个映射可能会改变。