如何使用 JPA CriteriaBuilder 查询执行外连接?

2024-04-08

我正在使用 JPA 2.0、Hibernate 4.1.0.Final 和 MySQL 5.5.27。我想构造一个 JPA 查询,每行返回两个实体,并且我想执行右外连接。这两个实体是:

@Entity
@Table(name = "user",
    uniqueConstraints = { @UniqueConstraint(columnNames = { "USER_NAME" }) }
)
public class User implements Comparable<User>, Serializable
{
    ...
    @Column(name = "first_name")
    @NotNull
    /* the first name of the User */
    private String firstName;

and

@Entity
@Table(name="code_user",
    uniqueConstraints = { 
        @UniqueConstraint(columnNames = { "CODE_ID", "USER_ID" }) }
)
public class CodeUser 
{

    @Id
    @NotNull
    @GeneratedValue(generator = "uuid-strategy")
    @Column(name = "ID")
    private String id;

    @ManyToOne
    @JoinColumn(name = "CODE_ID", nullable = false, updatable = true)
    private Code code;

    @ManyToOne
    @JoinColumn(name = "USER_ID", nullable = false, updatable = true)
    private User user;

到目前为止,这是我的 JPA,但问题是正在执行内部联接,并且每行仅返回一个实体(用户对象)...

    final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
    final CriteriaQuery<User> criteria = builder.createQuery(User.class);
    final Root<User> user = criteria.from(User.class);

    final Root<CodeUser> codeUser = criteria.from(CodeUser.class);
    final Join<CodeUser, User> joinUser = codeUser.join(CodeUser_.user);
    criteria.select(joinUser);
    …
    return criteria.where(builder.and(preds.toArray(new Predicate[preds.size()])));

如何执行外部联接以便返回所有用户并返回任何匹配的 CodeUser 记录?无法向我的用户实体添加额外的成员字段。


你必须检查Hibernate是否支持Right Join,因为根据JPA提供者并不要求支持RIGHT JOIN文档 http://docs.oracle.com/javaee/6/api/javax/persistence/criteria/JoinType.html:

右外连接和右外取连接不需要 Java Persistence 2.0 中支持。使用 RIGHT join 的应用程序 类型将不可移植。

所以,所以,如果您发现没有休眠版本这样做,我看到的唯一解决方案是:

解决方案1。将 LAZY 字段添加到User entity

@OneToMany(mappedBy="TODO", fetch=FetchType.LAZY)
private Collection<CodeUser> codeUsers;

然后使用 LEFT JOIN 从 User 导航到 CodeUsers。

解决方案2。进行两个不同的查询:第一个查询获取所有用户,第二个查询获取相应的 CodeUsers。

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

如何使用 JPA CriteriaBuilder 查询执行外连接? 的相关文章

随机推荐

  • req.flash() 需要会话

    我在视图中遇到闪光问题 我正在使用连接闪存 这是我的配置 app use express bodyParser app use express methodOverride app use express cookieParser secr
  • 为什么需要消息队列来与 Web 套接字聊天?

    我在互联网上看到了很多使用 Web 套接字和 RabbitMQ 进行聊天的示例 https github com videlalvaro rabbitmq chat https github com videlalvaro rabbitmq
  • 如何在 O(n+m) 时间内找到有向图中的母顶点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有向图 G V E 中的母顶点是顶点 v 使得所有其他顶点 顶点 G 可以通过从 v 出发的有向路径到达 给出一个 O n m 算法来
  • 由于通道无故陈旧而不断断开连接

    自从几天前发布最新版本以来 我们的用户不断地被断开连接 因为通道令牌在创建几分钟后就变得陈旧了 我们的令牌设置为持续 5 小时 但如果它们持续 5 10 分钟 我们就很幸运 并且当通道关闭时 我们甚至无法重新连接新的通道令牌 直到用户刷新为
  • .NET新手套接字问题

    我有一个使用 C 编写的客户端 服务器网络程序 TCPListener 和 TCPClient 类 服务器正在读取所有内容 来自客户端 少量 xml 就很好 直到我尝试发送 大文件 100k 返回给客户端 我正在使用流函数 客户端和服务器都
  • Spring 将表单的操作映射到控制器

    我是 Spring 框架的新手 我使用以下方法创建了一个控制器 RequestMapping fetch contactId public String getContact PathVariable contactId Long cont
  • 如何使antlr4完全标记化终端节点

    我正在尝试使用 Antlr 制作一个非常简单的解析器 它基本上标记了一系列 分隔标识符 我做了一个简单的语法 r STRUCTURE SELECTOR STRUCTURE SELECTOR ID STRUCTURE SELECTOR ID
  • Redis部署配置-主从复制

    目前我有两台服务器 我已经部署了基于node js Express JS的Web服务API 我正在使用 Redis 来缓存 JSON 字符串 将此设置部署到生产中的最佳选择是什么 我懂了here https stackoverflow co
  • 删除 WPF ListView/GridView 高亮镶边

    我有 WPF ListView 和 GridView 视图 我想删除行突出显示的任何痕迹 这段有用的代码可以在该网站的一个答案中找到
  • Android:以编程方式从设备管理器中删除我的应用程序?

    我正在尝试向我的应用程序添加一个按钮以将其从设备管理员中删除 并使用下面的代码 但我的应用程序崩溃了 Code 单击按钮 ComponentName devAdminReceiver new ComponentName this DemoD
  • 将金额转换为 Python 印度格式的单词

    如何将印度语中的金额转换为单词 我正在使用 num2words 库 但它在呈现 十万 和 千万 时呈现错误的单词集 例如 num2words 903614 55 lang en IN 其印刷 nine hundred and three t
  • Kendo mvc grid 内联编辑模式 DateTimePicker 模板给出错误

    我正在使用 Kendo UI mvc 网格来列出数据 我正在这个网格中进行内联编辑 我使用 EditorTemplate 作为日期时间字段 这样它将在内联编辑模式下为日期时间字段提供日期时间选择器 当我要单击 更新 按钮时 它会给我这样的验
  • 将较小的矩形合并为较大的矩形

    我有一个问题 我需要将小正方形合并成更大的矩形 假设我有一个 2D 网格 其中填充了随机 1 和 0 1 0 1 1 0 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 0 0 1 0 0 1 代表已填充的区域 我将它们绘制为屏
  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件

    我正在尝试构建颤振应用程序 之前运行正常 但突然出现此错误 Execution failed for task app checkDebugAarMetadata gt Could not resolve all files for con
  • 如何控制 UISearchDisplayController 的 searchResultsTableView?

    我想知道如何控制所使用的表视图UISearchDisplayController 你不能覆盖searchResultsTableView的财产UISearchDisplayController 因为它是一个只读财产 我尝试过覆盖search
  • 如何使用 WiX 设置服务的恢复选项?

    我有以下 wxs 文件
  • 为什么发送电子邮件需要多个邮件服务器跃点?

    当我向某人发送电子邮件时 我认为 我的电子邮件被发送到我的家庭服务器 然后电子邮件被发送到目标服务器 最后被发送到我想要发送给的人 有时 这需要多次跳跃 这是让我困惑的一点 为什么这需要多跳 为什么邮件不能直接发送到目标服务器 例如 XMP
  • iPhone 的精灵表生成器? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 到目前为止 我一直在制作自己的 1024 1024 精灵表 将图像放置在 64 x 64 网格中 以帮助轻松识别每个精灵的位置和大小 不用
  • Google 地图 - 从 ROADMAP 中删除网格

    I m integrating the google map in my site It works fine However it shows grid like this 我想删除它以使地图更美观 任何人都知道如何删除它 Thanks
  • 如何使用 JPA CriteriaBuilder 查询执行外连接?

    我正在使用 JPA 2 0 Hibernate 4 1 0 Final 和 MySQL 5 5 27 我想构造一个 JPA 查询 每行返回两个实体 并且我想执行右外连接 这两个实体是 Entity Table name user uniqu