【发布时间】:2017-01-05 08:21:36
【问题描述】:
我正在使用 Spring、Hibernate 和 Postgres。 在我的一个模型类中,我有:
@Entity
class SomeData {
private Long dataId;
private String name;
private Integer[] data;
}
它已被使用,并且我在数据库中有上述格式的数据。
“data”字段是bytea(在phppgadmin中可见)类型,db中保存的示例值之一是:
��ur[Ljava.lang.Integer;������xpsr...
问题是现在我需要将模型更改为
String[] data;
但是当我这样做时,Hibernate 无法读取这些数据,因为它的类型为 Integer。
我的问题 - 是否可以以某种方式将这些 Integer 数组对象转换为 String 数组对象?使用一些 db 工具、sql 查询或 Hibernate?
【问题讨论】:
-
或在您的
setData()方法中,包括将Integer[]转换为String[]的逻辑 -
问题是你为什么要存储序列化的Java对象?这几乎总是一个坏主意。最好将其存储为 Postgres 中的
int[]或text[]- 这样您还可以使用 SQL 来操作数据 -
@user3626048 您是否使用某种迁移工具来更改架构(例如 liquibase、flyway 等)?另外,您是否坚持新类型为
String[]? (而不是适当的规范化,f.ex.@ElementCollectionList<String>?) -
@user3626048 如果您没有这样的工具,您只能使用您编写的自定义脚本更改您的架构并手动执行它们。您需要一些 java 代码来从表中读取序列化值,您没有其他选择。 -- 是的,规范化有时需要更多的表格,但这只会让你的结构更清晰,而不是复杂。复杂的是你目前的情况,因为缺乏规范化。
标签: java spring postgresql hibernate