【问题标题】:JPA / Hibernate: StringClobType deprecatedJPA / Hibernate:不推荐使用 StringClobType
【发布时间】:2017-06-19 21:19:52
【问题描述】:

我最近升级了 Spring Boot,随之而来的是休眠升级。不幸的是,实体列@Type(StringClobType) 注释已被弃用。文档告诉我我需要将其切换到MaterilizedClobType

不幸的是,这破坏了我的应用程序。

我使用的是 PostgreSQL 9.5。 StringClobType 注释在数据库中创建了一个 text 类型,它允许我在字段中存储长文本。不幸的是,当 Hibernate 期待某种 LOB id 时,字符串文字又回来了。

这给出了错误:Bad value for type long

【问题讨论】:

  • Postgres 在记录其扩展数据类型(如 text)如何映射到 JDBC 方面做得很差,但它看起来和听起来好像 org.hibernate.type.TextType 可能是映射类型列的选择text。 Hibernate 说它映射到 JDBC 的 LONGVARCHAR 类型。目前尚不清楚该类型的特征是否与 PG 的Text 完全匹配,但它们似乎很接近。
  • 您可以在成员变量上方提及 @Lob 注释。在将对象持久化到数据库中时,如果字符串超出其限制,Hibernate 会自动获取 CLOB,并将输入作为数据库中的 text
  • @JohnBollinger,你一针见血。谢谢!请将此添加为合法答案,我会将其标记为已接受。

标签: java postgresql hibernate jpa spring-boot


【解决方案1】:

映射到 PG 的 Text 数据类型的 Hibernate @Type 值是 org.hibernate.type.TextType。这是你应该使用的。

对于它的价值,这是org.hibernate.type.MaterializedClobType 的兄弟,映射到CLOB;两者都是org.hibernate.type.AbstractLongStringType 的子类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多