【问题标题】:JPQL NEW operator with native query ?JPQL NEW 运算符与本机查询?
【发布时间】:2012-12-20 20:22:14
【问题描述】:

我可以使用NEW JPQL 运算符将查询结果映射到DTO 中吗?

我测试了这段代码:

Query query = em.createNativeQuery("SELECT NEW com.sim.dtos.entities.FreeLocation(t1.galaxie, t1.ss, t1.position) FROM ...");

List<FreeLocation> l = query.getResultList();

但我有例外:

[#|2012-12-20T12:9:21.203+0100|警告|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=79;_ThreadName=Thread- 2;|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet 抛出异常 org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « 。 » 位置:15

那么我可以在原生查询中使用NEW 运算符吗?

【问题讨论】:

    标签: jpql


    【解决方案1】:

    根据定义,本机查询是 SQL 查询。它必须包含适用于您的特定数据库的有效 SQL。

    查询将返回一个List&lt;Object[]&gt;,它应该很容易遍历列表并为每个Object[] 数组创建一个FreeLocation 的新实例。

    【讨论】:

    • 好的,谢谢 JB。所以我不能将 NEW 构造函数运算符用于本机查询?在 Eclipse 中,当我使用 List&lt;Object[]&gt; list = query.getResultList(); -> Type safety: The expression of type List needs unchecked conversion to conform to List&lt;Object[]&gt; 时出现警告。这是正常的吗?使用 List&lt;?&gt; 删除警告但我失去了自动投射
    • 是的,这很正常,因为该方法返回一个原始列表。您从文档中知道它包含 Object[]。忽略警告:这是不可避免的。
    • 好的,谢谢。我将在我的列表中使用@SuppressWarnings("unchecked") 所以
    猜你喜欢
    • 2017-08-29
    • 2017-08-11
    • 2021-05-27
    • 2018-08-02
    • 2019-03-15
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多