Hibernate-没有外键关联的两个表做联合查询

Hibernate多表联合查询 并且封装Vo对象 日期格式转换 阅读详情

有两个表Zsplcxxb(流程表)和Lcsplsb(流程审批历史表),两个表都有lcbh(流程编号),但是没有设置外键关联,做以下的查询:
from Zsplcxxb as a inner join Lcsplsb as b on a.lczbh = b.lczbh and b.blrbh='' and b.blrbh != a.sqrbh and a.clrbh != '' order by a.zhgxrq desc


出现以下问题(在HibernateConsole中运行)
1 errors occurred while listing (and calling getPathNames).
net.sf.hibernate.QueryException: outer or full join must be followed by path expression [from com.aljoin.xzsp.entity.Zsplcxxb as a inner join Lcsplsb as b on a.lczbh = b.lczbh and b.blrbh='' and b.blrbh != a.sqrbh and a.clrbh != '' order by a.zhgxrq desc]

原因:

  1. 只有两个entity有association的状况下,才能使用join。比如Zsplcxxb and Lcsplsb有many-to-one的association;
  2. HQL中没有“on a.lczbh = b.lczbh”这样的语法;

解决方法:

  1. 改用where子句
    from Zsplcxxb as a, Lcsplsb as b where a.lczbh = b.lczbh and b.blrbh=? and b.blrbh != a.sqrbh and a.clrbh != ? order by a.zhgxrq desc
  2. 如果是left join or right join,好像只能用session.createSQLQuery() or NamedQuery直接执行Native SQL了。

新问题:
 返回的List中每一项都是一个对象数组,包含了Zsplcxxb and Lcsplsb两个entity

原因:
1. “inner join fetch”子句,则 Lcsplsb 读取后立即填充到 Zsplcxxb 中。
2. “inner join”子句,则返回两个entity。而where子句等同于“inner join”子句

解决方法:加上Select语句
select a from Zsplcxxb as a, Lcsplsb as b where a.lczbh = b.lczbh and b.blrbh=? and b.blrbh != a.sqrbh and a.clrbh != ? order by a.zhgxrq desc

新问题:
返回的Zsplcxxb entity有重复的。因为一个流程有多个审批记录,inner join 之后对应每个审批记录都会返回一样的流程。

解决方法:加上distinct语句
select distinct a from Zsplcxxb as a, Lcsplsb as b where a.lczbh = b.lczbh and b.blrbh=? and b.blrbh != a.sqrbh and a.clrbh != ? order by a.zhgxrq desc

新问题:
net.sf.hibernate.JDBCException: Could not execute query
java.sql.SQLException: ORDER BY items must appear in the select list if SELECT DISTINCT is specified
.

原因:
如果是SQL的话,使用 distinct a.* 即可。但是对于HQL,没法使用 * 来选择属性,于是Hibernate就认为a.zhgxrq没有出现在select 子句中。

解决方法:使用 order by entity.pk or order by entity
select distinct a from Zsplcxxb as a, Lcsplsb as b where a.lczbh = b.lczbh and b.blrbh=? and b.blrbh != a.sqrbh and a.clrbh != ? order by a desc

参考文档:
1.javaworld@TW:[問題]關於使用HQL left outer join
2.JavaEye:『出错』两个没有外键关联的表做inner join的时候 HQL语句出错
3.Hibernate官方论坛:Chapter 14. HQL: The Hibernate Query Language

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略 本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。 阅读详情

相关推荐

高精度SAR ADC设计实战:从建模到版图的16位1MSPS实现

本文详细介绍了16位1MSPS高精度SAR ADC的设计过程,从建模到版图实现的完整流程。重点探讨了分段电容阵列设计、校准算法实现及版图匹配等关键技术,展示了如何在180nm工艺下实现92.5dB SNDR和109.6dB SFDR的高性能指标。文章特别强调了整数桥接电容设计对提升匹配精度的关键作用,为高精度模数转换器设计提供了实用参考。

weixin_33724046的博客 436

outer or full join must be followed by path expression

我只做了两个表的简单的ID的关联 sql 如下  select media.mediaName,media.mediaId from Media media join MediaIcp mc on  media.mediaId=mc.mediaId  where mc.mediaChannelid=1 结果报错 如下: outer or full join must be followed by ...

飞鹰 821

Vivado SDK中LWIP库版本冲突与RTL8211FDI兼容性实战解析

本文深入解析Vivado 2019.1 SDK中LWIP 1.0库与RTL8211FDI千兆PHY芯片的版本冲突问题,并提供实战解决方案。通过手动移植高版本LWIP库、整合第三方驱动及优化BSP配置,有效解决了以太网通信兼容性问题,确保千兆性能稳定运行。

ios99的博客 272

inner/outer join in hibernate

hibernate目前(3.0) 只支持theta-style的外连接,标准的ANSI-style外连接暂不支持ANSI-style的外连接是什么样子?select template from CoTemplate  template left outer join CoTempField field  on template=field.comp_id.coTemplatewhere 

而今迈步从头跃... 6774

如何制作DOS启动盘 U盘制作DOS启动盘 HP-U盘启动DOS7 详细步骤教程 Intel网卡使用软件 bootutil lanconfig eeupdate Intel网卡修改MAC地址教程

制作DOS启动盘不是一项复杂的任务,只要按照以下简单的步骤进行操作,您就可以自己动手制作一个DOS启动盘。

lcy524514826的博客 896

从零构建:用Simulink搭建固定翼无人机六自由度模型的避坑指南

本文详细介绍了使用Simulink从零构建固定翼无人机六自由度动力学模型的完整流程和避坑指南。重点解析了模型架构设计、气动力计算、参数配置、仿真求解器选择等关键环节的常见问题与解决方案,帮助开发者快速建立准确可靠的无人机控制系统仿真模型。

hhh00的博客 999

Hibernate left join 错误大家帮忙看看谢谢!

异常信息: [code="java"] org.springframework.orm.hibernate3.HibernateQueryException: outer or full join must be followed by path expression [select pt.productid,pt.name,pt.price,pt.content,pt.createtime,...

future_hui的专栏 557

Dify 系列教程 | 第 6 篇:工作流入门 -- 用可视化方式编排 AI 逻辑

Dify 工作流是一个基于有向无环图(DAG)的可视化 AI 逻辑编排系统。你可以把多个处理步骤(节点)用连线串联起来,数据从起点流向终点,每经过一个节点就被处理一次。用一个类比来理解:如果单次 Prompt 调用是"一道菜",那工作流就是"一道完整的生产线" – 原材料(输入)进入流水线,经过清洗(预处理)、切配(数据转换)、烹饪(AI 推理)、装盘(格式化输出)等工序,最终产出成品。创建一个工作流类型的应用(或高级聊天类型),就会进入工作流编辑器。编辑器基于ReactFlow构建(

weixin_43674738的博客 118

Hibernate没有外键关联的两个表做联合查询

     早几天修改某网站的数据读取缓慢的问题,数据读取主要涉及两个表,Product(产品表),ProductCategory(产品类别关联表).        经过分析源码,得到相应的HQL语句:      from Product qp inner join ProductCategory qpc on where qpc.productId=qp.id and qpc.categoryId...

肥明 1137

串口通信协议

文章目录前言一、串口通信结构图二、电平三、串口通信协议 前言 本文记录的是平时常用的串口通信有关知识点 提示:以下是本篇文章正文内容,下面案例可供参考 一、串口通信结构图 1、RS232标准串口通讯结构图 2、USB转串口通讯结构图 3、原生的串口到串口 二、电平 串口通信的时候,有三种电平:TTL电平、RS232电平、USB电平 TTL电平是从MCU直接出来的电平 RS323是一种通讯标准,因为高电平+15V低电平–15V电位差30V容错空间大,抗干扰能力强,一般用于工业设备直接通信电平转换芯

weixin_43772611的博客 6847

为什么我的OpenClaw安装后无法启动?Gateway服务故障排查全攻略

OpenClaw是一款功能强大的自动化工具,但其安装和运行依赖于多个服务组件,其中Gateway服务是核心组件之一。如果Gateway服务无法启动,整个OpenClaw系统将无法正常运行。本文将详细介绍OpenClaw安装后无法启动的常见原因及故障排查方法,帮助你快速定位并解决问题。

一键难忘的博客 4623

Hibernate数据库查询中DetachedCriteria数据库查询多表查询

一点点的在深入Hibernate,遇到的问题,我需要都记录下来,这次使用DetachedCriteria多表查询的问题,网上写的都只是一个片段,这导致了对一些问题理解的偏差。 Hibernated 数据库中有两张表Person,Room,由于是测试程序,未设外键,也未在映射文件中加入两个对象之间的关联属性,如,只是在写列子的时候用hql实现了两个对象之间的关联,类似想实现这样的sql:

FZDMD的专栏 2581

第1章 大数据概述

三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次 1995年前后 互联网 信息传输

wyz191的专栏 7088

Spring Data JPA 的多表联合查询, 丰富的实例演示

一. 简单复习数据库表之间的关系对于JPA的基本操作以及动态查询可以查看这篇文章:目前市场上对于ORM框架选型一般只有两种, 一种是, 另一种就是之前参与的项目都是使用MybatisPlus没有系统的了解JPA, 而到新的项目组中使用的是JPA正当学习时发现网络上对于JPA的文章纷繁杂乱, 尤其是对JPA多表联查使我看的摸不到头脑, 所以本着方便自己日后学习以及分享开发经验的出发点, 写下这篇文章.Mysql版本: Mysql8.0一. 简单复习数据库表之间的关系表之间存在哪几种关系?

2404_87285359的博客 2097

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java实体对象外键关联注解_JAVA基础:Hibernate外键关联与HQL语法

例如对于TUser类1.实体查询String hql = " from TUser";执行这条语句会返回TUser以及TUser子类的纪录。注: 如果 TUser 类具有外键, 查询会报错!解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错!hql = "from java.lang.Object"会返回数据库中所有库表的纪录。where 语句hql = "f...

weixin_39551103的博客 298

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

hibernate两张表关联查询

很久没用过hibernate了,今天尝试了一下多表连接查询,忘记了怎么配置,然后网上搜到了另一种的联合查询方式。 首先是两个实体类,一个用户表,一个商品表 User类 public class User { private Integer id; private String userName; private String phone; private String addres...

雨还在下的博客 5344

hibernate实现多表联合查询

hibernate实现多表联合查询 转自:http://blog.sina.com.cn/s/blog_67b9ad8d01010by1.html 以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。 hibernate很多实现都是靠...

u014303506的博客 2051

hibernate的多表联合查询

一、 Hibernate简介Hibernate是一个JDO工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必向传统的JDBC访问方式一样把结

Pretender 2172

Hibernate多表联合查询解决办法

Hibernate多表联合查询解决办法[ 2006-3-31 14:40:50 | By: 王宇飞 ]http://www.tgrj.com/blog/user1/wangyufei/archives/2006/31.html用Hibernate可能都会遇到这样的问题:多表联合查询返回的集合不能按通常的方式遍历,现将我的解决办法和大家分享一下,如果哪位有更好的办法请不吝

显斌的技术Blog 1万+

java hibernate 联合查询_hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系。例如:student表和score表需要做联合查询。1)sql: selects.id...

weixin_42685438的博客 1163

hibernate 实现多表联合查询

见到一篇好文章:  http://blog.sina.com.cn/s/blog_67b9ad8d01010by1.html 以前用sql实现联合查询是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。       hibernate很多实现都是靠喜欢

zhg09shanshui163的博客 580

hibernate多表联合查询

//三表联合查询 /* * select t.* from product t,category c,categorysecond cs WHERE t.csid = cs.csid and c.cid = cs.cid and c.cid = 1 */

读书探究世界的博客 1364

hibernate多表关联查询

方式一:建立视图 像查询表一样查询视图,给视图建立持久化类。 方式二:建立POJO之间的互相引用,配置关联映射 在*.hbm或Annotation中配置"subclass"属性,对应三种类型的关联方式one-to-one/many-to-one/one-to-many. 需要谨慎的使用Lazy和fetch关键字,避免不必要的查询,或者已经关闭Session后再查询。 方式三:直接查询,将结果保存在...

thunder-1 1636

Hibernate-关联映射

关联映射 多对一 //emp-dept联合查询 public void qEmp(){ session=HibernateUtil.getSession(); sql="from Emp where empNo =7788"; Query query=session.createQuery(sql); List<Emp>

北京Java青年 426

SpringBoot+Hibernate+Mysql的联表查询

SpringBoot+Hibernate+Mysql的联表查询 上一篇对SpringBoot+Hibernate+Mysql的基本部署和常用增删查改进行了说明,下面主要阐述下SpingBoot中关于hibernate的多表连接查询。 1.首先建立数据库表及其字段时应考虑外健的关联性 表一:student 表二:classroom classroom的实体类没有变化依旧如下: package com...

言语之间的博客 1516
上一篇: Linux OS 下遗忘MYSQL密码,重设步骤
下一篇: 前后端分离的思考与实践
SpaceXFalcon9
博客等级 码龄16年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值