使用 Hibernate 访问 Oracle DBLink'ed table
Use Hibernate to access an Oracle DBLink'ed table
我的用户想输入随机 sql 来访问 Oracle
数据库中存在数据库 link 的数据库。但是,这给出了 Hibernate
的例外。
下面是一个函数,它应该通过 运行 查询来检查查询是否有效。
欢迎任何建议。
例外情况是:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query 'Select ID,NAME from YYY@XXX_DB_LINK'
代码如下:
public String testSQL(String sqlQuery) {
if(!checkAllowedSQL(sqlQuery)) {
logger.debug("Forbidden SQL Query detected: " + sqlQuery);
return "Forbidden SQL Query detected '" + sqlQuery + "'";
}
try {
Query query = entityManager.createNativeQuery(sqlQuery);
List<Object[]> list = query.getResultList();
} catch(Exception e) {
return e.toString() + " '" + sqlQuery + "'";
}
return null;
}
您应该为您的链接 table YYY@XXX_DB_LINK
创建一个 SYNONYM
,然后您的用户可以提交像 Select ID,NAME from YYY
这样的本机查询,而不必担心 table真实位置。
我的用户想输入随机 sql 来访问 Oracle
数据库中存在数据库 link 的数据库。但是,这给出了 Hibernate
的例外。
下面是一个函数,它应该通过 运行 查询来检查查询是否有效。
欢迎任何建议。
例外情况是:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query 'Select ID,NAME from YYY@XXX_DB_LINK'
代码如下:
public String testSQL(String sqlQuery) {
if(!checkAllowedSQL(sqlQuery)) {
logger.debug("Forbidden SQL Query detected: " + sqlQuery);
return "Forbidden SQL Query detected '" + sqlQuery + "'";
}
try {
Query query = entityManager.createNativeQuery(sqlQuery);
List<Object[]> list = query.getResultList();
} catch(Exception e) {
return e.toString() + " '" + sqlQuery + "'";
}
return null;
}
您应该为您的链接 table YYY@XXX_DB_LINK
创建一个 SYNONYM
,然后您的用户可以提交像 Select ID,NAME from YYY
这样的本机查询,而不必担心 table真实位置。