Hibernate奇怪地收获clob值

时间:2008-09-10 02:09:02

标签: java oracle hibernate

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

@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",它们都与Note有关。

但是,当其中一个插入到数据库中时,较大的替换值会被裁剪为与最短的一样长。所以在这种情况下,我会"foo"和{{ 1}}在数据库中而不是"fiz""foo"

你知道为什么会这样吗?我已经检查并确认它们没有被我们的代码中的任何地方裁剪,它是彻底的休眠。

2 个答案:

答案 0 :(得分:0)

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

@Lob 
@Column(length=2147483648)

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

答案 1 :(得分:0)

许多JDBC驱动程序,特别是早期版本的Oracle,在插入LOB时会出现问题。您是否确保查询Hibernate已激活,并且相同的参数绑定在JDBC驱动程序中成功运行?