DB中的字段是DATETIME(mysql)类型。
为什么它是作为时间戳生成的,并且会重新生成
在对象持久性期间?在我的情况下,这不是一个理想的场景,
将其视为不是时间戳字段意味着它只应通过setter设置,
不需要生成,我真的不明白为什么它没有生成日期类型!
P.S。 我在mysql JDBC驱动程序中看到的问题是将datetime类型作为TIMESTAMP返回! 如何解决这一切?
答案 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;
答案 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 注释)。这个映射可能会改变。