相关疑难解决方法(0)

如何将PostgreSQL字符串迁移到文本类型?

我们正在使用看起来像这样的JPA注释类型(groovy代码):

@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
    @Id Long id
    String text
}
Run Code Online (Sandbox Code Playgroud)

在第一次编写时,我是JPA的新手并首先编写SQL,然后使注释的类与SQL匹配.阅读PostgreSQL似乎以下是我想要的表:

CREATE TABLE textnote (
    id bigint NOT NULL,
    text text
);
Run Code Online (Sandbox Code Playgroud)

这很有效,我们的表格看起来像这样:

 id  |          text
-----+------------------------
 837 | really long text here
Run Code Online (Sandbox Code Playgroud)

我现在要做的是纠正JPA实体看起来像这样:

@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
    @Id Long id
    @Lob String text
}
Run Code Online (Sandbox Code Playgroud)

通过添加@Lob注释,JPA提供程序(在我的情况下,hibernate)可以为我正确生成DDL,以防我们想要交换数据库.它还准确记录了我想要的文本字段.现在,当一个笔记被创建时,我看到这样的东西:

 id  |          text
-----+------------------------
 837 | 33427
Run Code Online (Sandbox Code Playgroud)

这对于新笔记来说很好,因为当我使用String getText()在代码中读取它时,它会返回非常长的文本.老实说我不知道​​PostgreSQL如何实现这种text类型,理论上我也不需要.但是,我们的生产数据库已经使用没有@Lob注释的旧代码存储了许多注释.在现有数据库上运行新代码会产生如下问题:

org.springframework.dao.DataIntegrityViolationException: Bad value for type long : not a number this time; …
Run Code Online (Sandbox Code Playgroud)

postgresql jpa

10
推荐指数
2
解决办法
9207
查看次数

标签 统计

jpa ×1

postgresql ×1