我正在使用 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/