我想使用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。
答案 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驱动程序一起使用。