sam*_*amz 17 java mysql timezone timestamp hibernate
我正在使用java,mysql,hibernate(3.6.x).在java方面我使用的是java.sql.Timestamp对象.在mysql方面,我正在使用datetime列.
我希望hibernate使用UTC时区保存/加载这些Timestamp对象,而不管system/java/mysql时区.
我找到了" 如何使用JPA和Hibernate以UTC时区存储日期/时间和时间戳 ",这些信息很丰富,但缺少一些我很难找到的最终实现信息.
我想实现一个UtcTimestampTypeDescriptor,如该线程所示,并配置hibernate使用它而不是正常的TimestampTypeDescriptor.
如何配置hibernate以使用UtcTimestamp类型而不是默认的Timestamp类型?
Dan*_*anJ 19
实现自定义Hibernate类型的替代方法是将以下JDBC选项添加到JDBC连接URL:
useTimezone=true
serverTimezone=UTC
Run Code Online (Sandbox Code Playgroud)
这将强制您的JDBC连接进入UTC时区,并要求MySQL从JVM时区执行转换.实际效果是您可以在JVM上保留本地时区(例如,用于打印日志消息等),而DATETIME列将保留为UTC.
例如:
<bean id="hibernateAnalysisSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<!-- Connection parameters -->
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC</prop>
...
Run Code Online (Sandbox Code Playgroud)
public class UtcTimestampType extends TimestampType从您的链接获取课程
并制作此代码
@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType")
public java.util.Date date;
Run Code Online (Sandbox Code Playgroud)
使用注释
或者
<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" />
Run Code Online (Sandbox Code Playgroud)
使用 *.hbm.xml
| 归档时间: |
|
| 查看次数: |
21807 次 |
| 最近记录: |