Java 冬眠作物的clob值异常
我在两个表之间有一对多关系。many表包含一个clob列。clob列在hibernate中如下所示:Java 冬眠作物的clob值异常,java,oracle,hibernate,Java,Oracle,Hibernate,我在两个表之间有一对多关系。many表包含一个clob列。clob列在hibernate中如下所示: @CollectionOfElements(fetch = EAGER) @JoinTable(name = NOTE_JOIN_TABLE, joinColumns = @JoinColumn(name = "note")) @Column(name = "substitution") @IndexColumn(name = "listIndex", base = 0) @Lob privat
@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;
@collectionfeements(fetch=EAGER)
@JoinTable(name=NOTE\u JOIN\u TABLE,joinColumns=@JoinColumn(name=“NOTE”))
@列(name=“substitution”)
@IndexColumn(name=“listIndex”,base=0)
@高球
私人名单替代;
因此,基本上我可能会有一张带有一些替代品的便条,比如“foo”
和“fizzbuzz”
。因此,在我的主表中,我可以有一个id为4的便笺,在我的Note\u JOIN\u表中,我可以有两行,“foo”
和“fizzbuzz”
,它们都与便笺相关
但是,当将其中一个插入DB时,较大的替换值将被裁剪为最短的值。因此,在这种情况下,我将在DB中使用“foo”
和“fiz”
而不是“foo”
和“fizzbuzz”
你知道为什么会这样吗?我已经检查并确认它们没有在代码中的任何地方被裁剪,它完全处于休眠状态。LOB/CLOB
列可能不够大。Hibernate对LOB/CLOB
有一些相对较小的默认列大小(可能取决于数据库)。无论如何,请尝试以下方法:
@Lob
@Column(length=2147483648)
根据需要调整长度(以字节为单位)。许多JDBC驱动程序,特别是Oracle的早期版本,在插入LOB时都会出现问题。您是否确保Hibernate使用绑定的相同参数启动查询,并在JDBC驱动程序中成功运行?我认为这不可能,因为它是基于列表中最大字符串的动态裁剪,而不是静态截止点。啊,我明白了。非常奇怪的问题。“note”的join列是实际的note id还是实际的note?note列是note表中的note的id是的。这是我们的JDBC驱动程序的问题。解决方案(直到我们能够更新驱动程序)是禁用批处理。