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 提取,然后在查询时指定适当的连接提取,从而实现最精细的控制。
在我的数据库中,我有一个包含一对多列表的电子邮件活动,列表包含多对多订阅者。
我遇到的问题是,例如,当我拉动一个活动时,我并不总是想要所有订阅者(可能是很多订阅者并且只想看到不同的活动)。
在创建映射时,有没有一种方法可以选择性地进行映射(在运行时决定)?或者解决问题的方法是什么?我应该只从数据库中提取所有内容并输出请求的部分吗?看起来开销很大。
根据您描述数据模型的方式,我假设您有一些类似于以下的映射(请注意,我将获取类型保留为 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 提取,然后在查询时指定适当的连接提取,从而实现最精细的控制。