Hibernate的left join fetch 查询条件问题

pp_bird 2008-04-18 05:35:59
当A left join fecth B的时候,怎么对B的条件进行进一步的筛选?
eg:
表VoteGroup:投票组的信息
id,
name

表VoteStatus:用户对该组的投票的状态
id,
VoteGroup.id,外键
UserInfo.id,外键

表UserInfo:用户表

两表已建立映射关系。VoteGroup与VoteStatus一对多,。UserInfo与VoteStatus一对多。
如果只单纯地左连接,hql="from VoteGroupa LEFT JOIN FETCH a.voteStatus order by a.id "没有问题,
但如果加上对VoteStatus的UserInfo.id=1的筛选,怎么个写法?

...全文
613 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Limdzh 2008-04-19
  • 打赏
  • 举报
回复
hql在左连接的时候好像没有办法再设置条件。
不过可以通过filter来实现。
在你的映射表VoteGroup.xml中,配置filter:
<set name="voteStatus" inverse="true" >
<key column="voteGroup_id" />
<one-to-many class="VoteGroup" />
<filter name="sqlfilter" />
</set>

<filter-def name="sqlfilter" condition="id=:id" >
<filter-param name="sqlfilter" type="int" />
</filter-def>

调用时,
session.enableFilter("sqlfilter").setParameter("id",1);
List list=session.createQuery("from VoteGroup as a LEFT JOIN FETCH a.voteStatus as b order by a.id ").list();
zhang5911 2008-04-19
  • 打赏
  • 举报
回复
架构师交流群:59048426,已经上传google 、 eBay、Youtube等顶级软件产品的架构分析!资料陆续上传中。
达到人数后开始培训!欢迎加入探讨,提问题!
=============================================
《企业应用架构模式》pdf 系列书籍已经上传至群共享,欢迎下载!
能够经常提问及回答问题的朋友,可以得到群主的精美小礼品,赶紧加入吧!

pp_bird 2008-04-19
  • 打赏
  • 举报
回复
回oxoxo:
我上面的那种写法,语法没有问题,显示的数据会变少。例如a表中有10条数据,b表2条,left join 后显示的b的字段中会有很多null(b.userInfo.id)值,oracle中这时候再加上筛选条件b.userInfo.id=1 ,就变成结果2条数据了。
我想要的是b表先筛选条件**.id=1,然后再a左连接b出来的效果。
pp_bird 2008-04-19
  • 打赏
  • 举报
回复
奇怪,怎么显示不了回复?
bojianyu 2008-04-19
  • 打赏
  • 举报
回复
......
bojianyu 2008-04-19
  • 打赏
  • 举报
回复
......
oxoxo 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pp_bird 的回复:]
已知hql="from VoteGroup as a LEFT JOIN FETCH a.voteStatus as b WHERE b.userInfo.id=1 order by a.id "是错误的。因为他是在a左连接b的结果后再加上条件**.id=1,因为left join 后b有为空的字段,oracle显示的数据条数会变少。想要的效果实际上是左连接之前b的表先进行条件的筛选。
[/Quote]

我怎么觉得你的这个hql语句是正确的呢
pp_bird 2008-04-18
  • 打赏
  • 举报
回复
已知hql="from VoteGroup as a LEFT JOIN FETCH a.voteStatus as b WHERE b.userInfo.id=1 order by a.id "是错误的。因为他是在a左连接b的结果后再加上条件**.id=1,因为left join 后b有为空的字段,oracle显示的数据条数会变少。想要的效果实际上是左连接之前b的表先进行条件的筛选。
本系统提出了一套面向MRI全心脏分割任务的端到端深度学习解决方案,其核心创新在于将Swin Transformer作为编码器骨干网络,充分挖掘心脏MRI图像中的全局上下文信息与局部细节特征,同时引入4通道输入机制,在传统RGB三通道图像基础上额外拼接一个点提示编码通道,支持用户通过鼠标交互在图像上自由标注前景(心脏区域)与背景点,从而将先验空间信息显式地融入网络前向传播过程,实现基于稀疏标注引导的精准分割。在解码阶段,系统采用U型对称结构,通过逐步上采样与跳跃连接逐级恢复特征图分辨率,最终输出二值分割掩膜(前景/背景),有效区分心脏区域与其他组织。训练过程中,系统选用交叉熵损失函数,配合AdamW优化器与余弦退火学习率调度策略,确保模型在训练集和验证集上稳定收敛,并在每个epoch结束后自动计算全局像素准确率、平均交并比(mIoU)、平均Dice系数、平均精确率、平均召回率及平均F1分数等多项评估指标,全方位监控模型性能。系统内置了完整的训练日志保存、损失曲线与性能曲线绘制、学习率衰减可视化等功能模块,便于用户直观分析训练过程并调优超参数。在推理应用层面,系统封装了基于Tkinter框架的图形化交互界面,用户可上传任意MRI切片图像,通过鼠标左键/右键分别添加前景/背景点,点击“执行分割”按钮后即可实时生成叠加了红色半透明掩膜的分割结果图像,支持点集的增删与重置操作,交互响应灵敏,操作逻辑直观清晰。整体而言,本系统不仅实现了从多模态数据加载、交互式标注编码、基于Transformer的分割建模到图形化推理部署的全链路覆盖,更在算法层面通过点提示引导机制与Swin Transformer结构的高效结合,显著降低了对大规模标注数据的依赖,同时提升了模型对心脏边界模糊、形态变异及邻近组织干扰的鲁棒性,为心血管疾病的计算机辅助诊断、术前规划及定量分析提供了一种兼具精度与灵活性的智能

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧