尝试使用getBinaryStream()从DB获取blob时出现“会话已关闭”错误

时间:2008-12-02 16:41:48

标签: java oracle hibernate

我正在使用Hibernate 3.1和Oracle 10 DB。 blob在Hibernate实体中定义为@Lob @Basic @Column,它对应于相关的DB表。 错误-java.sql.SQLException:Closed Connection-似乎一次出现,而不是每次尝试从DB获取blob。 这看起来像是一个hibernate提取问题,所以我想到指定要使用的fetch类型 - 在这种情况下EAGER似乎正确 - 但是没有找到任何方法来指定@Column类型的对象的提取类型(有一个为收集/“一对多”关系等方式做到这一点的方式

非常感谢您的帮助,谢谢。

4 个答案:

答案 0 :(得分:1)

这是针对Oracle数据库吗?

我不得不求助于Hibernate中的用户数据类型来实现这一点,但这是针对Oracle 9 db使用Hibernate 3.0。

有关此主题的长时间讨论(包括用户数据类型),请参阅http://www.hibernate.org/56.html

答案 1 :(得分:0)

我最近在使用blob的Oracle 11g数据库之上实现了一个hibernate系统。没有任何真正的魔力。

“会话已关闭”hibernate错误的标准原因是(并未明确指出)您的实体附加到的会话确实已关闭。

明确确定会话开启和关闭的地点和时间。如果您使用AOP或弹簧来为您管理,这可能并不完全明显。

此外,我非常确定您需要一个打开的事务,或者至少关闭了自动提交的数据库连接。

加雷

答案 2 :(得分:0)

如果要指定提取策略,请使用:

@Basic(fetch = FetchType.LAZY)

为您的会员。

答案 3 :(得分:0)

设置系统属性hibernate.jdbc.use_streams_for_binary = true可能会有所帮助。