使用j2ee加载BLOB总是为实体bean的BLOB属性获取null

时间:2014-10-11 18:09:58

标签: java jpa ejb blob

我想使用EJB从数据库加载BLOB。

问题:BLOB属性通常为null。

blob属性在bean中如下所示:

@Column(name = "REPORT_PARAMETER", length = 50000) // tried already: removing "length"
@Lob
@Basic(fetch = FetchType.EAGER) // tried already: uncomment, changing to "LAZY"
private byte[] reportParameters;

我像这样加载bean:

TestCacheDataBE data= (TestCacheDataBE) em.find(TestCacheDataBE.class, cacheId);

加载工作,我可以读取所有其他属性。只有BLOB属性始终为null。

数据库中有数据。 SELECT显示BLOB列不为空。

select dbms_lob.getlength(report_parameter)
from T_REPORT_CACHE;

上面的陈述告诉我,BLOB专栏中有数据。

使用bean和entitymanager保存数据,如下所示:

em.persist(data);

但是保存工作正常!

所以唯一的问题是将BLOB数据从数据库加载到bean中。保存工作,加载所有其他数据也有效。

我使用的是weblogic 10,Java 1.5。

1 个答案:

答案 0 :(得分:0)

所以我们解决了这个问题。我会在这里为其他人记录解决方案,因为很明显,没有人知道答案。

这是一个司机问题。我们使用了Weblogic驱动程序:

<jdbc-driver-params>
 <url>jdbc:bea:oracle://domain:1541</url>
 <driver-name>weblogic.jdbc.oracle.OracleDriver</driver-name>

适用于Oracle驱动程序:

<jdbc-driver-params>
 <url>jdbc:oracle:thin:@domain:1542:abcd</url>
 <driver-name>oracle.jdbc.driver.OracleDriver</driver-name>

有趣的事实: 它曾经使用Weblogic驱动程序(在Windows 7上)。但是有些东西改变了,它不再起作用了(可能是Windows更新或Oracle数据库更新改变了一些东西)。现在它只适用于Oracle驱动程序。我们在Linux服务器上部署,它仍然可以与Weblogic驱动程序一起使用。