如何避免 Hibernate 中旧式的外连接 (+)?

2024-01-07

我写了这样的 HQL 查询:

SELECT a FROM A a LEFT JOIN a.b where ...

Hibernate 生成这样的 sql 查询:

SELECT a FROM A a LEFT JOIN a.b where a.b_id = b.id(+)

但是当我写这样的东西时:

SELECT a FROM where a.b.id > 5

它生成 SQL:

SELECT a.* FROM A b cross join B b where b.id > 5

因此,当我结合这些方法时,我收到 Oracle 错误:

SQL Error: 25156, SQLState: 99999
ORA-25156: old style outer join (+) cannot be used with ANSI joins

那么有没有办法告诉 Hibernate 我只想接收一种类型的查询(旧式或新式)?

UPDATE:我所说的组合是指像这样的 HQL 查询:

SELECT alarm FROM Alarm as a LEFT JOIN alarm.madeBy as user where user.name = 'George' and a.source.name = 'UFO'

所以在这里我指定Alarm应该连接到User使用 LEFT JOIN,并且不指定如何连接Alarm with Source,因此 Hibernate 会使用 Cross Join 将其连接起来。

SQL 查询将是这样的:

FROM Alarms a, Users u cross join Sources s where a.user_id = u.user_id(+) and a.source_id = s.source_id and u.name = 'George' and s.name = 'UFO'

为了更多理解,我将添加警报实体的小示例:

@Entity
@Table(name = 'Alarms')
public class Alarm {
   @Id
   private BigDecimial id;

   @ManyToOne
   @JoinColumn(name = "user_id")
   private User madeBy;

   @ManyToOne
   @JoinColumn(name = "source_id")
   private Source source;
}

所以这个问题的解决就是将hibernate的Dialect设置为org.hibernate.dialect.Oracle9Dialect

<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免 Hibernate 中旧式的外连接 (+)? 的相关文章

随机推荐

  • Django 形成动态让作者作为模型表单中的登录用户

    我正在尝试制作一些表单 允许用户添加一些对象 删除它们或编辑 但我一直坚持模型作者之类的内容 假设我们得到了带有场的模型镜头 author models ForeignKey settings AUTH USER MODEL on dele
  • 如何最小起订量索引属性

    我正在尝试模拟对索引属性的调用 IE 我想最小起订量以下 object result myDictionaryCollection SomeKeyValue 还有设置器值 myDictionaryCollection SomeKeyValu
  • 在.NET中编写虚拟打印机[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望创建一个虚拟打印机 将数据传递到我的 NET 应用程序 然后我想创建一个安装程序来安装打印机和
  • 如何在 Weka 中计算聚类评估的准确性

    我们如何使用 Weka 计算集群的准确性 我可以使用这个公式 Accuracy A tp tn Total samples 但我如何知道Weka工具中实验输出的真阳性 假阳性 真阴性和假阴性是什么 Weka中有几种不同的聚类模式 使用训练集
  • 为什么我的Python在尝试运行turtle模块中的turtle.tracer()方法时不断崩溃?

    我正在使用海龟模块编写贪吃蛇游戏 但是当我将这一行添加到我的代码中时 海龟屏幕和 python 崩溃了 turtle tracer 0 有人可以帮助我完成游戏吗 多谢 my code from turtle import Turtle Sc
  • 根据 Scala 和 Spark 中的频率替换二元组

    我想用这种模式替换所有频率计数大于阈值的二元组 word1 concat concat word2 我已经尝试过 import org apache spark SparkConf SparkContext object replace d
  • 警告:X 的默认移动赋值运算符将多次移动分配虚拟基类 Y

    在 C 11 下测试库时 我在 Clang 下收到警告 我以前从未遇到过这个警告 并且搜索并没有提供太多的阅读和研究方式 该警告如下所示 它似乎与多重继承和公共基类有关 但我不清楚触发警告的细节或我应该采取什么措施来解决它 我的第一个问题是
  • Xml 数据到 WPF TreeView 的双向绑定

    我正在尝试重写我的森林垫 http ForestPad com使用 WPF 作为表示层的应用程序 在 WinForms 中 我以编程方式填充每个节点 但如果可能的话 我想利用 WPF 的数据绑定功能 一般来说 将 WPF TreeView
  • git pull Godaddy 与 Bluehost 的 shell_exec 配置

    我有一个来自 Github 的 git pull web hook 位于两个遥控器上 GoDaddy 生产 和 Bluehost 登台 这个问题与这些公司本身无关 而是关于设置差异的可能原因是什么 我有这个脚本 我已将其设置为 github
  • PHP 限制对管理页面的访问,除非登录

    我一直在考虑限制对管理页面访问的方法 其中之一是使用会话并使用管理页面中的下一个代码部分 if isset SESSION is admin header Location index php exit 我想知道是否有另一种方法可以做到这一
  • python读取HID

    我想做一个程序 它从连接到 Linux 系统的 HID 获取输入并从中生成 MIDI 我在 MIDI 方面还不错 但在 HID 方面却遇到了困难 虽然这种方法工作正常 取自 usr bin python2 import struct inp
  • 如何允许用户登录MySQL?

    作为 root mysql 用户 我执行了以下命令 grant all on mydb to john identified by john1 然后从 shell 中 我尝试通过以下方式登录 mysql h localhost u john
  • OpenCV 3:可用的 FeatureDetector::create() 和 DescriptorExtractor::create() 选项列表?

    edit 我正在看错误的OpenCV2代码示例 没有FeatureDetector create在 OpenCV3 中 这让我感到困惑 嘿 OpenCV 新手 通过分解其他人的 C 代码来通过示例进行学习 我想尝试以下所有可用选项 dete
  • 密码复杂性的正则表达式

    我正在尝试通过客户端 JavaScript 和服务器端 ASP NET C 上的正则表达式来实施密码复杂性的强制执行 规则如下 必须为 8 40 个字符 必须包含至少一位数字 必须包含至少一个小写字母 必须包含至少一个大写字母 必须包含至少
  • 如何修复选项 -F 错误未找到的目录[重复]

    这个问题在这里已经有答案了 我收到以下错误 ld 警告 找不到选项目录 F Applications Xcode app Contents Developer Platforms iPhoneSimulator platform Devel
  • Android SeekBar 使用 setMax 动态设置最大值后不刷新

    我正在使用 Stock SeekBar 组件来浏览一组 ViewPager 它工作得很好 唯一的问题是 当数据发生变化时 我必须通过 setMax int value 动态更改 SeekBar 的最大值 当我这样做时 SeekBar 不会更
  • zbarsdk ZBarReaderViewController - 设置ipad全屏

    我无法在 iPad 上全屏显示 zbarsdk 阅读器 它一直显示在左上角 我尝试过以下方法 reader wantsFullScreenLayout YES reader cameraOverlayView frame CGRectMak
  • 连续运行PHP脚本

    我在 MySQL 中有一个数据库 其中有时间条目 时间条目有1000多个 我想提取时间并在那个时间运行 PHP 脚本 我尝试连续运行 PHP 脚本来检查时间 但我的服务器不允许运行该脚本超过 60 秒 编辑 我必须每秒检查一次数据库 还有其
  • Post 方法 + WinHttpRequest + multipart/form-data

    我很困惑为什么这不起作用似乎找不到任何问题 这是代码 Public Const MULTIPART BOUNDARY speed Function getBalance As String Dim sEntityBody As String
  • 如何避免 Hibernate 中旧式的外连接 (+)?

    我写了这样的 HQL 查询 SELECT a FROM A a LEFT JOIN a b where Hibernate 生成这样的 sql 查询 SELECT a FROM A a LEFT JOIN a b where a b id