【发布时间】:2016-02-09 13:28:25
【问题描述】:
在现有的 Java EE 应用程序中有一个 JPA 实体,其中包含一个字符串数组作为字段。不好,但它就是这样。它没有任何注释,在 Hibernate(在 JBoss EAP 6.1 Alpha 和 MySQL 5.6 上)中运行应用程序会将其存储为 TINYBLOB。一旦字符串数组包含多个值,这显然会失败,但只要数组不是太大,它就可以正常工作。
有没有办法通过 JPA 2(不是 Hibernate!)注释强制将该字段视为 BLOB 而不是 TINYBLOB?
在设置过程中使用以下内容实际上会创建BLOB 类型的列,但在尝试存储实体实例时它仍然会失败
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String"
字段注解定义:
@Lob
@Column(columnDefinition = "blob")
【问题讨论】:
-
你应该删除你的
@Column注释,或者你应该有一个@Column(columnDefinition = "clob"),因为你想要一个variable-length character large object string。 -
@aribeiro 但我不能 - 那么我现有的所有条目都已损坏。
-
那么,如何创建一个新的带有
@Column(columnDefinition = "clob")注释的字段,从现在开始逐渐使用,并将另一个标记为@Deprecated?您可以更改您的代码,以便所有更新和新插入都将引用新字段,然后会出现一个安全点,可以安全地删除您的blob字段。
标签: java jpa jakarta-ee