Java Spring Hibernate,运行时可选择执行映射?

Java Spring Hibernate, Runtime Optionally Perform Mappings?

在我的数据库中,我有一个包含一对多列表的电子邮件活动,列表包含多对多订阅者。

我遇到的问题是,例如,当我拉动一个活动时,我并不总是想要所有订阅者(可能是很多订阅者并且只想看到不同的活动)。

在创建映射时,有没有一种方法可以选择性地进行映射(在运行时决定)?或者解决问题的方法是什么?我应该只从数据库中提取所有内容并输出请求的部分吗?看起来开销很大。

根据您描述数据模型的方式,我假设您有一些类似于以下的映射(请注意,我将获取类型保留为 LAZY 的默认值)。

@Entity
public class Campaign {
  // ...
  @OneToMany
  private List<MailingList> lists;
}

@Entity
public class MailingList {
  // ...
  @ManyToMany
  private List<Subscriber> subscribers;
}

@Entity
public class Subscriber {
  // ...
}

如果您想要获取 Campaign 实体和关联的 MailingList 关系,您可以在 HQL/JPQL 中轻松完成,如下所示:

FROM Campaign c JOIN FETCH c.lists

不会 获取订阅者列表,因为 @ManyToMany 关联在默认情况下是惰性的,因此只有当且仅当您调用getSubscribers().

您应该始终支持在映射中使用 LAZY 提取,然后在查询时指定适当的连接提取,从而实现最精细的控制。