Hibernate 与 Oracle 和 PostgreSQL 的长文本列

Bor*_*ris 6 java oracle postgresql spring hibernate

我正在尝试让一个实体在 Spring Boot (1.4.4) 应用程序中与 Oracle (11.2) 和 PostgreSQL(9.4) 一起使用。

我的实体包含一个长文本字段(超过 4000 个字符)。Oracle 中适当的数据类型是 CLOB,PostgreSQL 中相应的类型是 TEXT。

我能够让它与 PostgreSQL 一起工作

@Column(name = "LONG_TEXT", columnDefinition="TEXT")
private String longText;
Run Code Online (Sandbox Code Playgroud)

然而,Oracle 在休眠验证阶段会失败,因为 CLOB 需要 @Lob 注释。

以下代码适用于 Oracle

@Lob
@Column(name = "LONG_TEXT")
private String longText;
Run Code Online (Sandbox Code Playgroud)

然而,这次从 PostgreSQL 读取时失败,出现以下异常:

PSQLException:大对象不能在自动提交模式下使用

堆栈溢出建议在事务中执行查询。忽略在选择查询中调用事务的可疑要求,将 @Transactional 添加到查询方法并没有帮助。

任何想法都非常受欢迎。

Bor*_*ris 0

我们找到的解决方案是采用@Lob 和@Transactional 方法。

主要问题是 @Transactional 注释的放置,导致 PSQLException。一旦修复,我们就可以使用这两种类型的数据库。