Java 将列类型从bytea改为timestamp,并在Postgres数据库中保留数据
java类中的字段如下所示:Java 将列类型从bytea改为timestamp,并在Postgres数据库中保留数据,java,sql,hibernate,hibernate-mapping,hibernate-postgresql,Java,Sql,Hibernate,Hibernate Mapping,Hibernate Postgresql,java类中的字段如下所示: private LocalDateTime updateTime; 但是,Hibernate将其存储在数据库中,如下所示: (output of "select update_time from my_table;") ac ed 00 05 73 72 00 1b 6f 72 67 2e 6a 6f 64 61 2e 74 69 6d 65 2e 4c 6f 63 61 6c 44 61 74 65
private LocalDateTime updateTime;
但是,Hibernate将其存储在数据库中,如下所示:
(output of "select update_time from my_table;")
ac ed 00 05 73 72 00 1b 6f 72 67 2e 6a 6f 64 61 2e 74 69 6d 65 2e 4c 6f 63 61 6c 44 61 74 65 54 69 6d 65 fc 45 53 6c f5 a5 87 10 02 00 02 4a 00 0c 69 4c 6f 63 61 6c 4d 69 6c 6c 69 73 4c 00 0b 69 43 68 72 6f 6e 6f 6c 6f 67 79 74 00 1a 4c 6f 72 67 2f 6a 6f 64 61 2f 74 69 6d 65 2f 43 68 72 6f 6e 6f 6c 6f 67 79 3b 78 70 00 00 01 42 09 8e 35 21 73 72 00 27 6f 72 67 2e 6a 6f 64 61 2e 74 69 6d 65 2e 63 68 72 6f 6e 6f 2e 49 53 4f 43 68 72 6f 6e 6f 6c 6f 67 79 24 53 74 75 62 a9 c8 11 66 71 37 50 27 03 00 00 78 70 73 72 00 1f 6f 72 67 2e 6a 6f 64 61 2e 74 69 6d 65 2e 44 61 74 65 54 69 6d 65 5a 6f 6e 65 24 53 74 75 62 a6 2f 01 9a 7c 32 1a e3 03 00 00 78 70 77 05 00 03 55 54 43 78 78
现在,我们决定将java代码更改为:
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
private LocalDateTime updateTime;
所以数据库中的值看起来像
(output of "select update_time from my_table;")
2013-12-18 00:00:00.0
但是,数据库表在此列中已经有一些值我们现在如何将更新时间的数据类型转换为时间戳,以便正确处理现有值?
使用的数据库版本和依赖项如下所示:
数据库版本:
psql --version
psql (EnterpriseDB) 9.1.6.10
hibernate的mvn依赖项:
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.0.1.Final</version>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.0.1.Final</version>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>1.2.0.Final</version>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
org.hibernate
冬眠核心
4.0.1.最终版本
org.hibernate
休眠验证器
4.2.0.4最终版本
org.hibernate
休眠实体管理器
4.0.1.最终版本
org.hibernate
冬眠
1.2.0.1最终版本
org.hibernate.javax.persistence
hibernate-jpa-2.0-api
1.0.1.最终版本
真的困在这里了。你知道如何才能做到这一点吗?非常感谢您的帮助。您没有得到太多的响应,因为(我认为)没有人知道十六进制值字符串是什么。如果您可以将其转换为可以形成有效时间戳的内容,那么从SQL来看,这非常简单。如果没有,您可能必须(1)读取所有bytea值,并(2)将它们分为文本时间戳和Java对象内部时间戳,然后(3)将它们保存为所有文本时间戳,然后将它们全部转换为真实时间戳。当我使用hibernate在java代码中获取该字段时,该十六进制值字符串将被转换为LocalDate。如果这是您必须转换它们的唯一方法,您必须将它们读入应用程序,将它们转换为文本并写回。