问题标签 [hibernate-native-query]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
973 浏览

hibernate - 使用 mariadb 和 SqlResultSetMapping 的 JPA 本机查询抛出一个奇怪的错误

关系:

公司有地址。这就是我正在测试这个简单示例的全部内容。

这是具有 SqlResultSetMappings 的地址实体。

这是公司实体

希望是执行一个简单的本机查询并像这样映射结果集:

瞧……我执行了查询,结果爆炸了

现在,在有人问我为什么要为此使用本机查询之前,我想补充一点,我有一个更复杂的用例,它以类似的方式爆发(一个更复杂的查询)。所以我创建了上面的测试来重现这个问题,看看我是否能得到一些指示。

难道我做错了什么?为什么选择 created_2_2_0 呢?我的选择语句中什至没有它。这可能是 mariadb 驱动程序错误吗?

0 投票
1 回答
1126 浏览

java - 从 SQL 视图休眠结果转换

我创建了一个 SQL 视图,其中包含 User 的所有属性和另外一个"is_granted",它是布尔值,使用自定义 pl/sql 函数计算。在我的应用程序中,我需要创建本机 SQL 查询并将值映射到 DTO 对象。问题是,在转换过程中抛出异常并且查询失败。

考虑以下模型:

查询 - 将属性映射到 DTO

有谁知道问题出在哪里?转型有什么问题吗?

堆栈跟踪

0 投票
1 回答
546 浏览

java - 本机查询结果参数未映射到类模态

我在 JPA 存储库中使用了本机查询,我的查询如下:

从我的查询中,我得到了“versionNo”,它没有映射到 mu 用户模式。我也把它放在我们的用户模式中,比如

with 是 getter/setter.but 在视图中我会得到 versionNo 为空。

请帮我。

0 投票
1 回答
672 浏览

sql-server - 在哪里可以找到使用本机查询连接到 SQL Server 数据库的有效 Java EE 示例应用程序?

在哪里可以找到使用本机查询连接到 SQL Server 数据库的有效 Java EE 示例应用程序?

我正在使用 Eclipse、Microsoft SQL Server Management Studio (SSMS)、glassfish、

我需要将 Eclipse 中的 Java EE 应用程序连接到 SSMS 中的数据库。

我需要一个使用本机查询专门调用 SQL Server 的应用程序,例如“SELECT * FROM Table”。

谢谢

0 投票
0 回答
525 浏览

sql-server - Hibernate 从本机查询创建的查询包含非法语法

我试图从带有本机查询的表中进行选择,如下所示:

firstIndex为 0 时(不管是什么pageSize),Hibernate 为我创建以下查询:

这很好,但是当我将 更改为firstIndex0 以外的值时,hibernate 将为我创建以下查询:

但此查询包含SELECT * as page0_的不是有效的 SQL Server 语法。

另请注意,当我使用以下代码时,一切都很好:

谁能告诉我怎么了?这是一个错误还是我做错了什么?

0 投票
3 回答
2313 浏览

java - Hibernate createNativeQuery 返回 Clob 的代理对象

我被迫进入使用休眠 createNativeQuery 返回对象数组列表的情况。

我的查询从中返回值的(许多)列之一是 CLOB。

返回的 Object 是 com.sun.Proxy 对象。

在这里 看到了一个问题

用于标识它是一个被返回的 WrappedClob。

但是,鉴于我现在在我的 Java 代码中有这个代理对象,我如何将它转换成有用的东西……比如字符串?

0 投票
1 回答
3357 浏览

mysql - 本机查询 executeUpdate 似乎在 Spring 事务中提交数据

我的用例如下:创建应用程序用户(EntityManager.persist)时,我还必须创建一个数据库用户并授予他权限(这就是我需要休眠nativeQuery的原因)。

我有一个 Spring @Transactional 方法,它通过两个调用调用我的 DAO:

我的 DAO 方法如下所示:

现在,只要执行executeUpdate()的第一行,我就可以在数据库中看到持久的 companyReportsUser 以及 DB 用户(user1@localhost)。

所有的 nativeQueries 都被执行并立即一一提交。由于它们已提交,因此无法回滚。我的配置中的任何地方都没有设置自动提交参数,所以我假设它是“假”,如 Hibernate 文档中所见。

  1. 我已经在没有本机查询的情况下测试了 @Transactional 行为,它按预期工作(当我抛出 RuntimeException 并且没有数据插入数据库时​​,事务被回滚)

  2. 在调试时,我发现持久化操作在正在运行的事务中调用时会延迟执行。

  3. 本机查询似乎立即创建并执行 PreparedStatement(至少我没有找到任何类型的队列。

  4. 我想我可能无法获得 hibernate 本机查询和 Spring 事务之间的交互,但是我花时间阅读了有关事务和本机查询的 Spring 和 Hibernate 文档,但没有找到任何对我有帮助的东西。

  5. 也许有比本机查询更好的方法来创建数据库用户并授予权限(尽管我没有找到)

以下是我的应用程序配置:

应用程序上下文.xml

持久性.xml

使用的库:

  • 休眠 4.1.6.FINAL
  • Spring 3.2.2.RELEASE
  • mysql-connector-java-5.1.21
  • MySQL 5.5
0 投票
1 回答
236 浏览

oracle - 使用容器管理的数据源执行 Oracle 本机查询

我有一个使用 JPA连接<non-jta-datasource>persistence.xml容器管理的 Oracle 数据源的项目,我必须在某些时候使用动态构建的本机查询。默认情况下,在 Oracle 中,我需要schema在表名中指定进行查询,但我无权访问模式名称(也不应该)。

首先,这是预期的行为吗?如果我执行SELECT * FROM TABLEHibernate 是否应该将其重命名为 Datasource 参数并SELECT * FROM SCHEMA.TABLE改为执行?

如果不是,有没有办法以动态方式检索模式名称?即使数据源由 WebLogic/JBoss 管理?

0 投票
1 回答
1425 浏览

java - 将 ID 分配给 JPA 本机查询的结果的最简单方法是什么?

我有一个复杂的 SQL 查询,我在 JPA 中将其作为本机查询来实现。实体管理器会自动将我的结果集的每一行转换为一个Person对象,从而导致List<Person>

entityManager 要求Studentbean 使用 注释@Entity,这需要@Id. API 还要求所有字段都匹配。不幸的是,我的 select 子句来自各种来源,因此实际上并没有 ID。事实上,我想稍后在我调用StudentRepostiory.save(student).

我处于第 22 条捕获状态。我需要一个 id 来生成对象,但我还没有 id。

我应该怎么办?

  • 我试过让 ID 为空。它使所有结果为空。
  • 我已经尝试将 ID 设为零。它使所有结果都相同。
  • 我尝试添加生成策略注释。什么都没做。

供你参考

学生.java

0 投票
5 回答
1400 浏览

java - How to avoid executing the query multiple times?

Say I have this nativeQuery in my DAO:

which returns all the values I need.

The problem is I have too many results and I need the query to run only once instead of running for every single row found.

I'm retrieving the query result and setting all the values into a class (value object) called Class like this:

I'm a bit stuck here because I've never treated this Object[] to Class casting before.