【问题标题】:JPA and PostqreSQL: long string persistenceJPA 和 PostqreSQL:长字符串持久性
【发布时间】:2010-12-24 15:55:36
【问题描述】:

谁能告诉我如何使用 JPA(我使用 PostgreSQL)保存长文本?

这是我在课堂上定义一个很长的字符串的方式:

@Lob
private String  body;

但是,这会在数据库中产生一个 charactervariing(255) 类型的字段。

此外,我尝试使用@Column 注释:

@Column(columnDefinition="TEXT")
private String  body;

但一切都是徒劳的。

如果您对这个问题提出有益的评论,我将不胜感激。

【问题讨论】:

  • 我在做第一件事,我得到了一个 OID,postgresql 中的 LO,真正的噩梦

标签: postgresql jpa


【解决方案1】:
@Column(columnDefinition="TEXT")

确实是这样做的方法。也许您必须重新生成 DDL?

【讨论】:

  • 不幸的是,@Column 注释似乎被完全忽略了。
  • 亲爱的乔纳森,我厌倦了上述建议的修复,但我遇到了错误。您的帮助将是不言而喻的。请帮忙。 stackoverflow.com/questions/25094410/…
【解决方案2】:

我今天也遇到了同样的情况。 只是

@Lob
private String  body;

应该创建一个类型为“text”的 db 列(PostgreSQL - 可变长度不限),但应该重新生成表。

【讨论】:

  • 这应该是正确的方法,其他解决方案都给我:错误:“`”或附近的语法错误
  • 对于独立于数据库的解决方案,这一定是正确的选择
【解决方案3】:

这是一个很老的帖子了,但是因为它有很多观点,而且我今天也有类似的问题,我想它值得一个简单的答案。

我的解决方案类似,但我发现我需要 LONGTEXT 列:

@Column(columnDefinition="LONGTEXT")
private String body;

是的,你必须重新生成它。我正在使用播放!我不得不重新启动我的应用程序。

【讨论】:

  • 您使用 LONGTEXT 代替 TEXT 的意图是什么?原因不见了。
【解决方案4】:

JPA、Postgresql 您可以使用:

@Column(length = 2000)
    private String template;

它生成:

template character varying(2000)

【讨论】:

    【解决方案5】:

    你也可以使用验证注解:

    @Size(max=xxx)
    

    这当然也可以作为验证约束。

    【讨论】:

      【解决方案6】:

      我不知道为什么,但我添加了 @Column(长度 = 1024)

      在 getter 之上,它可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        相关资源
        最近更新 更多