当前位置: 首页 > 知识库问答 >
问题:

使用HQL和pageable创建subselect with*return并生成别名错误的JPA查询

林玮
2023-03-14

因此,我希望从一个JPA查询返回多个对象,该查询还允许分页,这样我只能返回它返回的前10个对象。

JPA:返回多个实体的查询

在属性=值的表blah中作为select blah_0.id,blah_0.peropty进入,但随后转换为select*from(select blah_0.id,blah_0.peropty from表blah中属性=值),其中rownum>=10

    protected SqlStatementWrapper executeQueryStatement(
        String sqlStatement,
        QueryParameters queryParameters,
        boolean scroll,
        List<AfterLoadAction> afterLoadActions,
        SharedSessionContractImplementor session) throws SQLException {

    // Processing query filters.
    queryParameters.processFilters( sqlStatement, session );

    // Applying LIMIT clause.
    final LimitHandler limitHandler = getLimitHandler(
            queryParameters.getRowSelection()
    );
    String sql = limitHandler.processSql( queryParameters.getFilteredSQL(), queryParameters.getRowSelection() );

    // Adding locks and comments.
    sql = preprocessSQL( sql, queryParameters, getFactory().getDialect(), afterLoadActions );

    final PreparedStatement st = prepareQueryStatement( sql, queryParameters, limitHandler, scroll, session );
    return new SqlStatementWrapper(
            st, getResultSet(
            st,
            queryParameters.getRowSelection(),
            limitHandler,
            queryParameters.hasAutoDiscoverScalarTypes(),
            session
    )
    );
}

也许创造一种新的方言?我似乎无法处理hibernate供应商适配器,因为它只是转到Oracle。

共有1个答案

沃念
2023-03-14

我需要设置MySQL5Dialect,以生成正确的查询。总是简单的配置。

    LocalContainerEntityManagerFactoryBean lcemfb = EntityManagerFactory(merlinDataSource(),
            new String[]{"packages.to.be.scaned"});
    Properties props = new Properties();
    props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    props.setProperty("hibernate.show_sql", String.valueOf(showQueies));
    lcemfb.setJpaProperties(props);
 类似资料:
  • Hibernate createalias()方法用于创建连接。当我调用s.iterator()方法时,hibernate是否正在生成另一个select查询以获取子记录?根据我的理解,它生成一个单选查询,以使用join获取父记录和子记录。 映射文件:

  • 问题内容: 我正在运行的查询如下,但是出现此错误: #1054-‘IN / ALL / ANY子查询’中的未知列’guaranteed_postcode’ 我的问题是:为什么我不能在同一数据库查询的where子句中使用伪列? 问题答案: 您只能在GROUP BY,ORDER BY或HAVING子句中使用列别名。 标准SQL不允许您在WHERE子句中引用列别名。之所以施加此限制,是因为执行WHERE

  • 我有两个多对多映射的类:用户和主题。我想做的是得到所有的主题谁有提供的用户。有时(这是我最奇怪的部分)它会给我带来这样的错误: com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception:您的SQL语法中有一个错误;请查看与您的MySQL服务器版本相对应的手册,以便在第1行'))'附近使用正确的语法 返回的查询是: 我在这里漏掉了什么?完整的

  • 我在Spring-Boot启用JPA的项目中有以下相关的JPA注释类(所有Groovy代码): 当我尝试执行以下JPA查询时: 生成的SQL语句似乎没有字符表的别名或appares_in的列名: 生成以下SQL: 非常感谢任何帮助。

  • 问题内容: 我对sql中的别名有疑问和疑问。如果我想在同一查询中使用别名,可以使用它。例如:考虑表名xyz与列a和b 这有可能吗? 问题答案: 您是在谈论给查询中的表达式赋予标识符,然后在查询的其他部分重用该标识符吗? 在Microsoft SQL Server中这是不可能的,而我几乎所有的SQL经验都仅限于此。但是您可以执行以下操作。 显然,该示例并不是特别有用,但是如果您在多个地方使用该表达式

  • 这个问题可能有答案……但对于使用postgresql数据库的openbravo来说并没有答案。 我有openbravo 3.0框架。在我的窗口中,我有两个日期字段,即fromdate和todate。要求是我必须编写一个hql where子句来根据当前日期过滤记录。日期字段是没有时区的时间戳。 意思是fromdate 和迄今为止 我浏览了这个链接,将hql where子句编写为 当我打开此窗口时,我