Spring Data JPARepository:如何有条件地获取子条目
2022-09-01 08:58:18
如何配置其JPA实体,除非提供某个执行参数,否则不获取相关实体。
根据Spring的文档,4.3.9。配置 Fetch- 和 LoadGraphs 时,您需要使用注释来指定查询的提取策略,但是这不能让我在运行时决定是否要加载这些实体。@EntityGraph
我可以将子实体放在单独的查询中,但为了做到这一点,我需要将我的存储库或实体配置为不检索任何子实体。不幸的是,我似乎找不到任何关于如何做到这一点的策略。 将被忽略,并且仅在指定要热切检索的实体时才有用。FetchPolicy
EntityGraph
例如,假定是父级和子级,并且一个帐户可以有多个联系人。Account
Contact
我希望能够做到这一点:
if(fetchPolicy.contains("contacts")){
account.setContacts(contactRepository.findByAccountId(account.getAccountId());
}
问题是,无论如何,spring数据都急切地获取联系人。
帐户实体类如下所示:
@Entity
@Table(name = "accounts")
public class Account
{
protected String accountId;
protected Collection<Contact> contacts;
@OneToMany
//@OneToMany(fetch=FetchType.LAZY) --> doesn't work, Spring Repositories ignore this
@JoinColumn(name="account_id", referencedColumnName="account_id")
public Collection<Contact> getContacts()
{
return contacts;
}
//getters & setters
}
帐户存储库类如下所示:
public interface AccountRepository extends JpaRepository<Account, String>
{
//@EntityGraph ... <-- has type= LOAD or FETCH, but neither can help me prevent retrieval
Account findOne(String id);
}