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

子查询问题上的Blaze持久化联接

师成弘
2023-03-14

我试图通过使用blaze bit persistence对子查询进行联接,我有一个标准构建器,如下所示,

cbf.create(em, b.class, "foo")
   .innerJoinOnSubquery(aCTE.class, "maxEnt")
   .from(a.class, "subFoo")
   .bind("account_id").select("subFoo.accountId","account_id")
   .bind("id").select("subFoo.id","id")
   .where("subFoo.accountId").eq(100L)
   .end()
   .on("maxEnt.account_id").eqExpression("foo.accountId")
   .end()
   .where("foo.accountId").eq(100L);

当我执行它时,我得到如下所示的sql查询

SELECT s0_.id FROM   b s0_ 
   INNER JOIN (SELECT t0_.account_id     AS col_0_0_, 
                      t0_.id AS col_1_0_ 
               FROM   a t0_ 
               WHERE  t0_.account_id = 100 ) t1_ 
           ON ( ( NULL IS NULL ) 
                AND s0_.account_id = t1_.account_id) WHERE  s0_.account_id = 100 

问题发生在on子句中,当我试图比较on cluase中的两个表account_id时,我得到了列丢失错误,因为在子查询中默认为account_id形成了别名。请让我知道如何解决它。我使用的是Hibernate5.4JPA供应商。

问题:db::异常:在处理t1_.account_id时,表“t1_”中没有列“t1_.account_id”。

共有1个答案

祝锐
2023-03-14

这可能是个窃听器。为此,我打开了https://github.com/blazebit/blaze-persistence/issues/1285。您能否告诉我您使用的是哪个Hibernate版本,如果在WHERE子句前添加一个括号,SQL查询是否有效?这里好像少了括号,但我还不知道为什么。

更新:

尝试将此作为解决办法:

cbf.create(em, b.class, "foo")
   .with(aCTE.class) // Maybe pass false as second argument to avoid inlining
     .from(a.class, "subFoo")
     .bind("account_id").select("subFoo.accountId","account_id")
     .bind("id").select("subFoo.id","id")
     .where("subFoo.accountId").eq(100L)
   .end()
   .innerJoinOn(aCTE.class, "maxEnt")
     .on("maxEnt.account_id").eqExpression("foo.accountId")
   .end()
   .where("foo.accountId").eq(100L);
 类似资料:
  • 问题内容: 我正在尝试将SQL转换为SQLAlchemy。我要查询的SQL版本如下: 我的SQLAlchemy查询如下: 我收到一个错误 如果我将SQLAlchemy查询调整为以下内容: 结果= query.all() 我得到一个错误 任何帮助,将不胜感激,谢谢! 问题答案: 一旦调用,就无法访​​问 对象 ,而只能通过访问器访问列。 而是执行以下操作:仅加载所需的列,以避免任何名称冲突: 然后在

  • 数据落盘问题的由来 这本质上是数据持久化问题,对于有些应用依赖持久化数据,比如应用自身产生的日志需要持久化存储的情况,需要保证容器里的数据不丢失,在Pod挂掉后,其他应用依然可以访问到这些数据,因此我们需要将数据持久化存储起来。 数据落盘问题解决方案 下面以一个应用的日志收集为例,该日志需要持久化收集到ElasticSearch集群中,如果不考虑数据丢失的情形,可以直接使用前面提到的应用日志收集一

  • 我一直在理解Laravel查询生成器和纯SQL之间的融合。 我有2张桌子: user:包含具有主键的用户 User_Action:这是一个表,其中包含由和动作的组成的PRIMARYs记录。 ex: 使用者 用户操作 我的需要: 现在我想检索一个用户列表,其中包含每个用户的最新操作。因此,我只需要在从到的连接中获取一行,并且这一行必须是具有最新日期时间的一行。我的前任也是如此;我只想获取dateti

  • 主要内容:JPA级联持久化示例,输出结果级联持久化用于指定如果实体持久化,则其所有关联的子实体也将被持久化。 以下语法用于执行级联持久性操作 - JPA级联持久化示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步:

  • pinia的数据持久化,我用了个插件pinia-plugin-persist,用了该插件后数据是持久化了,但是取的值变成了字符串,需要序列化转换一下,例如:存入对象取出时时字符串,需要再次转换为对象才能使用,有没有什么好的方法,不用每次取值都转换一下?