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

具有order by的jpql复杂查询

奚才良
2023-03-14

我有2个实体(这只是一个简化的例子,不是真正的实体):

@Entity
@Table(name = "entityA")
public class EntityA {
    @ManyToOne(cascade = CascadeType.ALL)
    EntityB start;
    @ManyToOne(cascade = CascadeType.ALL)
    EntityB stop;
    ...
}


@Entity
@Table(name = "entityB")
public class EntityB {
    public String name; 
    ...
}

当我尝试使用order By编写查询时,Hibernate崩溃:

select t.start from EntityA t
where 
...
order by t.start.name
SELECT DISTINCT entityB1_.uuid AS uuid2021_, ..
  entityB1_.name               AS name2021_,
...
FROM entityA entityA0_
INNER JOIN entityB entityB1_
ON entityA0_.stop_uuid=entityB1_.uuid,
  entityB entityB2_,
  entityB entityB3_
WHERE entityA0_.start_uuid    =entityB2_.uuid
AND entityA0_.start_uuid=entityB3_.uuid
AND entityA0_.qn        =?
AND entityB2_.lifeCycle            ='READY'
AND entityB3_.lifeCycle            ='READY'
ORDER BY entityB2_.name

原因:java.sql.SqlSyntaxerRoreXception:ORA-01791:不是选定的表达式

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)

共有1个答案

陈欣荣
2023-03-14

试试这样的方法,看看这是否停止了Hibernate不必要地添加连接

SELECT s FROM EntityA t JOIN t.start s ORDER BY s.name
 类似资料:
  • 如何将这个复杂的sql语句更改为JPQL? 这是否可以在JPQL表单中显示?

  • 我正在为授权服务器开发一个管理用户界面。其中一个功能是显示登录用户的列表,我们通过查询存储当前发布的刷新令牌的数据库表来实现这一点。用户可以从多个设备登录到同一个应用程序,生成多个令牌。目前的要求不是按设备细分此视图,而是如果用户已登录,则它们将显示在列表中。如果我们撤销访问权(此UI的其他要求之一),那么所有设备的刷新令牌都将被撤销。 不管怎样,最让我困惑的是这个问题。我编写这个查询是为了收回指

  • 我使用Spring JPA规范来创建标准查询。我的代码如下所示: 我被告知这是一种糟糕的方法,我应该使用投影(DTO)从数据库中读取,因为创建实体并在之后映射它们很昂贵。问题是我不知道如何将规范与DTO相结合。要使用包含嵌套 DTO 和大量属性的复杂 DTO 来管理复杂和动态查询(来自用户输入的筛选器等)的最佳方式是什么?

  • 问题内容: 如何查询具有复杂类型(如地图/数组)的RDD?例如,当我编写此测试代码时: 我认为语法应该是这样的: 或者 但是我明白了 无法访问类型为MapType(StringType,StringType,true)的嵌套字段 和 org.apache.spark.sql.catalyst.errors.package $ TreeNodeException:无法解析的属性 分别。 问题答案:

  • 我是JPA/JPQL的新手,所以如果这个问题不是很清楚,请原谅。 我正在使用以下JPQL查询: 查询在无状态会话上运行,以便获得DB中当前数据的事实上的快照,该快照与实体管理器分离(因此使用了left join fetch)。 不幸的是,我遇到了两个问题: 在尝试微调性能时,使用本机查询似乎并没有比使用JPQL查询更好的性能。使用本机查询也会产生对象类型的结果,这需要后期处理。

  • 如何使用在中创建复杂查询请求?我担心实体之间的关系。它们可能会影响请求的准备。 需要查询SQL,我的版本@Query: