通过hibernate(使用postgresql或oracle 10g / 11g)属性存储filedata映射为
<property name="fileData" type="binary">
<column name="fileData" length="104857600" />
</property>
从java应用程序我需要从db访问字段的长度(我不想加载整个对象,出于性能原因)。我没有找到任何hibernate(hql)解决方案来查询该信息,因此我决定搜索所使用的不同数据库的功能。对于postgresql我发现:
select BIT_LENGTH(filedata) from table
完美(并且速度惊人)。现在我需要类似的东西用于oracle。我已经尝试了
select utl_raw.length(filedata) from table
和 从表
中选择DBMS_LOB.GETLENGTH(filedata)两者都会导致错误消息:
&#34;错误:ORA-00997:非法使用LONG数据类型&#34;
有没有可能在没有选择对象本身的情况下查询oracle db上的hibernate属性的长度?
(hibernate在oracle上创建一个&#34; long raw&#34;字段,在postgresql上创建&#34; bytea&#34;字段)
事先提前(另外:语句将用于迁移上下文,新创建的filedata实体将以编程方式获取filesize属性)
答案 0 :(得分:0)
好吧,看起来我在这里找到了答案: https://community.oracle.com/thread/2137593
create table temp_deleteme as select to_lob(<long raw field>) obj from <tablename>;
select dbms_lob.getlength(obj) from temp_deleteme;
创建tempTable后,我可以从中选择filedatalength,将其写入我的实体,然后再次删除该表。仍然不是很好的性能,但是让数据库完成工作,我不必将实体传输到我的服务器,只计算所需的信息。