Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate逆向工程过程为DateTime生成@Temporal(TemporalType.TIMESTAMP)_Java_Hibernate_Jpa - Fatal编程技术网

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

Java Hibernate逆向工程过程为DateTime生成@Temporal(TemporalType.TIMESTAMP),java,hibernate,jpa,Java,Hibernate,Jpa,数据库中的字段类型为DATETIME(mysql) 为什么它会被生成为时间戳,并且会被重新生成 在对象持久化期间?对我来说,这不是一个理想的情况 因为不是时间戳字段,所以只能通过setter进行设置 不需要生成,我真的不明白为什么它没有生成日期类型 p、 美国。 我在mysql JDBC驱动程序中看到的问题是,将datetime类型返回为TIMESTAMP! 如何解决这些问题?在不了解hibernate内部工作原理的情况下,我们在数据库(mysql)中的日期字段为date。不是DATETIME。

数据库中的字段类型为DATETIME(mysql)

为什么它会被生成为时间戳,并且会被重新生成

在对象持久化期间?对我来说,这不是一个理想的情况

因为不是时间戳字段,所以只能通过setter进行设置

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

p、 美国。 我在mysql JDBC驱动程序中看到的问题是,将datetime类型返回为TIMESTAMP!
如何解决这些问题?

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

您应该考虑将日期表更改为日期,然后您可以更改实体bean并删除<代码> @ Time< /Calp> < /P>


在任何情况下,如果您不希望从实体bean中删除
@Temporal(TemporalType.TIMESTAMP)
,则可能是安全的。

@Temporal
注释表示带注释的属性是否应映射到
java.sql.Date
(仅包含日期部分),
java.sql.Time
(只保存时间部分)或to
java.sql.Timestamp
(保存日期和时间,时间也只有几秒钟)。它与属性值的生成无关。

我认为有两种可能性:Hibernate不知道mysql的数据类型“dateTime”或“dateTime”显式映射到java.sql.Timestampjava.utils.Date(需要TemporalType.Timestamp注释)。此映射可能可以更改。

Hibernate中的数据类型

@Temporal(TemporalType.DATE)    = date
@Temporal(TemporalType.TIME)    = hour
@Temporal(TemporalType.TIMESTAMP) =date + hour
Hibernate不关心数据库或类型,Hibernate只是尝试强制转换它。 顺便说一下,在OracleBD日期存储(日期+小时)和时间戳存储(日期+小时+…毫秒)中

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

@Temporal(TemporalType.TIMESTAMP)
Date myProp;

@Shervin好的,但我也需要在字段中保留时间,因此我必须在mysql中保留DATETIME。您建议将其映射从时间戳更改为DATETIME?可能需要将此类字段注释为“temporatalType.DATE”如果您需要在查询中比较一些没有时间的日期。Tadeusz Kopec您的意思是可以将其保留为时间戳吗?我明白了。但另一个问题是,如果字段实际上是时间戳,并且应该[在更新等时]重新生成,该怎么办.Hibernate知道吗?我仍然看到getter和setter,但我不需要手动设置此字段。我可以将其从映射中排除,对吧,但如果我保留它并且不使用setter,它会在行更新时更新时间戳吗?它可以测试。我想-是的。好的,Hibernate可能为您生成的唯一属性是@Id和@Versi在上。如果您的数据库为某些字段生成值,并且希望Hibernate知道,请使用@Generated annotation。@Vanger您认为,手动将注释更改为TEMPORALTYPE.DATETIME会更好吗?我拼错了,没有“DATETIME”类型。改为“Shervin”said完全可以尝试删除批注。应使用时间值正确处理字段值。