【发布时间】:2014-04-01 06:59:16
【问题描述】:
我目前的结构如下(伪代码):
public class Order
{
@OneToMany(targetEntity = Orderline.class, fetch = FetchType.LAZY)
private List<Orderline> orderlines;
private Client client;
}
public class Orderline
{
@ManyToOne(mappedBy = 'orderlines')
private Order order;
private Client client;
}
public class Client
{
// your usual Client class, its contents aren't important for the question
}
假设我可以有一个 ID 为 123 的订单属于客户端 X。我也可以有一个 ID 为 123 的订单属于客户端 Y。当延迟加载(或急切加载,就此而言)时,如何我知道当我从数据库中为客户 X 获取 ID 为 123 的订单时,我不会从客户 Y 那里获得订单行吗?如果 JPA 仅在 orderline 端检查外键,是否有办法在延迟(或急切)加载时为客户端添加检查?
我想在不使用 Hibernate 或 Eclipselink 等特定实现的情况下解决此问题,以便在必要时轻松切换实现。
【问题讨论】:
-
你要做什么检查..?
-
我想检查一下客户端属性,所以我可以获取属于订单 123 和客户端 X 的订单。
-
您是说您需要根据订单 ID 和客户 ID 获取值..!!我说的对吗??
-
理想情况下你不在乎。当您访问 orderLines 列表时,JPA 将获取它(如果尚未获取)。
-
查看我的类似问题,它包含代码片段:stackoverflow.com/q/21647947/1639556