如何在Java / Hibernate中获取CLOB的长度

时间:2017-05-10 08:54:07

标签: java oracle hibernate

我正在使用一个具有CLOB列的表(Oracle)。我正在使用Hibernate查询表。以下是我用于映射Oracle表的类的快速浏览:

@Entity
@Table(name="D2D_OPD_ORDERDELIVERY")
public class D2dOpdOrderDelivery implements Serializable {

// other column mappings omitted for brevity

@Column(name="POD_SIGNATURE_IMG", nullable=true)
@Lob
private Clob podSignatureImage;

我已成功设法运行Hibernate查询,该查询从数据库中返回一行:

// Create a Hibernate query (HQL)
Query query = session.createQuery("FROM D2dOpdOrderDelivery WHERE orderNumber = :orderNumber");
query.setParameter("orderNumber", orderNumber);

在我的代码的其他地方,我对我的Clob执行空检查 - 它不是null。接下来,我试着得到我的Clob的长度。这就是我遇到问题的地方。我收到以下错误:

java.sql.SQLException: Closed Connection
    oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
    oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
    oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:209)
    oracle.sql.CLOB.getDBAccess(CLOB.java:1212)
    oracle.sql.CLOB.length(CLOB.java:223)

抱歉,我只是不明白为什么会收到此错误。我已经运行了我的查询(该行中的所有其他字段都存在)。为什么我无法获得CLOB的长度?

有人可以指出我哪里出错了吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,在发布这个问题后,我又回去搜索了一些互联网。在我发布我的问题之前,我以为我做了很好的工作 - 但这是另一回事......

无论如何,我在这里找到了一个有用的链接: http://www.javavids.com/video/how-to-read-data-from-blob-using-jpa-hibernate.html

我对代码所做的更改:

@Column(name="POD_SIGNATURE_IMG", nullable=true)
@Lob
@Basic(fetch=FetchType.LAZY)
private char[] podSignatureImage;

然后我可以在我的char []

上调用.length

希望这对其他人有帮助......