【发布时间】:2017-07-25 08:17:04
【问题描述】:
我读过Spring Data JPARepository: How to conditionally fetch children entites。 但我想使用方便的 JPA 注释而不是手动加入所有子项。
假设我有以下模型:
@Entity
public class UserModel extends BaseModel<User> {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<CredentialModel> credentialList = new ArrayList<>();
@ManyToMany
@JoinTable(
name = "users_actions",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "action_id", referencedColumnName = "id")
)
private List<ActionMode> actionList = new ArrayList<>();
}
获取credentialList 和actionList 可能是一项耗时的操作(加入获取等)。我不想自动获取 credentialList 或 actionList 。但是当我访问它们时,我希望它们是一个空列表而不是LazyInitializationException。
即使我没有在@Query 中特别指定JOIN FETCH 字段,我也可以使用这些字段吗?只需将其保留为空列表即可。
如果没有,有没有办法实现同样的需求?
【问题讨论】:
-
这有什么意义?如果它们不代表实体关系,为什么还要在实体中定义它们?
-
正如 galovics 所说,这样做有点麻烦。如果您假设某些内容是空的,那么您不应该处理它,仅此而已。如果您希望它被动态加载,那么延迟加载是要走的路。同样正如 SCI 指出的那样,您可以构建一个跳过集合的实体,我假设 BaseModel
是您代码中的那个实体。这里的问题是,如果你不打算使用它们,你为什么要写它们?
标签: java jpa spring-data