我在两个表之间有一对多的关系。许多表包含一个 clob 列。clob 列在 hibernate 中看起来像这样:

@CollectionOfElements(fetch = EAGER)
@JoinTable(name = NOTE_JOIN_TABLE, joinColumns = @JoinColumn(name = "note"))
@Column(name = "substitution")
@IndexColumn(name = "listIndex", base = 0)
@Lob
private List<String> substitutions;

所以基本上我可能有一个带有一些替换的注释,比如说 "foo""fizzbuzz". 。所以在我的主表中我可以有一个 id 为 4 的注释,在我的 NOTE_JOIN_TABLE 我会有两行, "foo""fizzbuzz" 两者都与注释有关系。

但是,当其中之一插入数据库时 较大的替代值被裁剪为与最短的一样长。 所以在这种情况下我会 "foo""fiz" 在数据库中而不是 "foo""fizzbuzz".

您知道为什么会发生这种情况吗?我已经检查并确认它们没有在我们的代码中的任何地方被裁剪,它肯定是休眠的。

有帮助吗?

解决方案

许多 JDBC 驱动程序(尤其是 Oracle 的早期版本)在插入 LOB 时都会出现问题。您是否确保使用相同的参数绑定的 Hibernate 查询在您的 JDBC 驱动程序中成功运行?

其他提示

LOB/CLOB 列可能不够大。Hibernate 有一些默认的列大小 LOB/CLOB 相对较小(可能取决于 db)。无论如何,尝试这样的事情:

@Lob 
@Column(length=2147483648)

根据您的需要调整长度(以字节为单位)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top