【发布时间】:2017-08-15 18:09:06
【问题描述】:
通常在我的工作时间内,我会花费大量时间查询 db(oracle) 并从存储我们接收到的流的各种表中解析 blob。 有各种类型的流,所以我试图制作一个简单的 web 应用程序,在其中编写 select 语句并返回相应解析的所有流。 我的问题是使用 jpa 并执行简单的本机查询:
select B_BODY from TABLE_B where TRANSACTION_ID = 'GG-148c-01502790743907855009';
该语句不返回任何内容,而是直接查询数据库返回记录。 这是我的java代码:
@Transactional(readOnly = true)
public List<Object[]> retrieveBlobs(String squery) {
squery = squery + " and rownum <= "+maxResults;
Query query = em.createNativeQuery(squery);
List<Object[]> resultList = query.getResultList();
return resultList;
}
这是生成的sql:
Hibernate:
select
B_BODY
from
TABLE_B
where
TRANSACTION_ID ='GG-148c-01502790743907855009'
and rownum <= 100
我知道这种方式可能看起来很奇怪,但我们的团队花了很多时间尝试标记存储的流(识别如何解析流的代码也存储在表中)。没用说这个应用程序正在运行只能在内部使用。有一种方法可以按原样执行查询并检索正确的输出?
【问题讨论】:
-
直接从 webapp 执行查询?您是否考虑过这可能带来的安全风险?您的 DBA 对此有何看法?
-
正如我所说,只会在已经可以在 db 上执行查询的人内部使用。顺便说一句,我已经向 dba(我自己)询问过,他同意了。