【发布时间】:2015-09-23 03:26:45
【问题描述】:
最近我不得不在两个没有对象关系映射的 JPA 实体之间使用外连接。根据规范和论坛帖子,只有在 JPA 级别映射实体时才支持外部联接。
下面的示例代码。要求是找到没有任何订单的客户。
@Entity
class Customer {
private int id;
}
@Entity
class Order {
private int customerId;
public int getCustomerId() { return customerId; }
public void setCustomerId(int customerId) { this.customerId = customerId ; }
}
就我而言,我必须选择原生查询来完成工作。
对于未来的 JPA 规范是否支持没有关系映射的外连接有什么想法吗?
谢谢 拉克什
【问题讨论】:
-
抱歉,您能再解释一下您的问题吗?您是否定义了实体类但没有定义它们之间的关联?您可以发布您尝试过的代码吗?或许可以告诉我们您想要实现的目标。
-
没错,JPA 实体没有在 JPA 级别定义任何关系。编辑以包含示例代码。在给定的场景中,JPA 不提供外连接。原因:它需要符合 2/2.1 规范的对象路径。
-
那么为什么不使用关联“正确地”定义实体,让您的生活更轻松呢?定义这些实体之间的关系有什么缺点(除了你必须输入更多代码)?
-
@DuncanKinnear 这是个好问题。定义 JPA 级别 OR 映射很大程度上取决于情况。当涉及到一个实体“组成”另一个实体的情况时,它们是救命稻草,即实体 1 仅在实体 2 存在时才存在。但是,在所有情况下都不是必须的。例如。审计就是这样一个例子。我宁愿避免 OR 映射本身而不是映射,然后处理延迟/急切加载和相关的休眠会话边界问题。
标签: java hibernate jpa orm outer-join