java - 在 Hibernate 中执行普通 SQL 查询

标签 java oracle hibernate

我正在使用 Hibernate 进行数据库连接。我的用户有权获取open_mode(从v$database中选择open_mode)。 我想使用现有的 hibernate DB 配置在 hibernate 中执行查询 另外,我不想在我的 java 文件中创建 JDBC 连接代码,如下所示

String url = "jdbc:oracle:thin:@192.179.9.31:1521:db1";
Connection conn = DriverManager.getConnection(url,"user","password");
Statement stmt = conn.createStatement();
ResultSet rs;    
        rs = stmt.executeQuery("select openmode from v$database");
        while ( rs.next() ) {
            String lastName = rs.getString("openmode");

由于这个 v$database 不是我们架构中的真实表,我认为我们无法为 v$database 创建实体类并使用 hql 执行查询。

任何人都可以如何执行上述查询并使用我现有的配置获得结果。

这是我的 hibernate 配置详细信息。

<property name="dialect">  org.hibernate.dialect.Oracle9Dialect</property>       
<property name="connection.url"> jdbc:oracle:thin:@192.179.9.31:1521:db1       
</property> 
<property name="connection.username">user</property> 
<property name="connection.password">passsword</property> 
<property  name="connection.driver_class">     oracle.jdbc.driver.OracleDriver      
 </property> 
 <property name="myeclipse.connection.profile"> Oracle 9i Connector
 </property> 

最佳答案

您可以在 Hibernate 中为没有映射实体的表创建 native 查询。 像平常一样创建一个 hibernate session ,然后创建引用下面代码片段的 native 查询。

String sqlQuery = "select openmode from v$database";
Query q = session.createNativeQuery(sqlQuery);
List<Object[]> listResults = query.getResultList();

这将返回数组列表。您需要迭代此列表并将输出解析到您域中的任何 POJO。

this page 上提供了一个示例。 您还可以对与表映射的实体使用此方法的重载版本,以利用数据库特定功能,例如提示CONNECT BY

更新

OP尝试的另一种方法是使用createSQLQuery。 Scalar 用于映射 Hibernate 类型的列。

String sqlQuery = "select open_mode from v$database"; 
SQLQuery query = session.createSQLQuery(sqlQuery).addScalar("open_mode", Hibernate.STRING); 
List result = q.list(); 
String open_mode = result.get(0).toString();

关于java - 在 Hibernate 中执行普通 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49312646/

相关文章:

java - Splunk 和 JMeter 百分位数的差异

oracle - 简单的 Oracle 查询 : literal does not match format string

node.js - 无法使用 NodeJS 从表中检索数据。错误: ORA-12560: TNS:protocol adapter error

java - Getting WARN : SQL Error: 1205, SQLState : 41000 ERROR: Lock wait timeout exceeded; try restarting transaction. 使用hibernate保存记录

java - NoSQL 数据存储提供程序 : org. hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider

java - 从一个 Activity 中获取值(value)到另一个类(class)

java - 插入嵌入式文档而不阅读整个文档 - spring,mongo

java - 在 JiBX 中绑定(bind)额外信息

sql查询-分组然后加入

java - 完整性约束违规 : unique constraint or index violation on Foreign key HSQL