【发布时间】:2018-07-09 07:17:06
【问题描述】:
我使用 spring 数据和 JpaSpecificationExecutor::findAll 方法来获取我的模型。调用此方法时如何使用查询提示?
上面的源代码工作正常,但我无法为我的 JPA 提供程序(在我的情况下为 EclipseLink)设置 QueryHint。
@Repository
public interface ProductRepository extends JpaRepository<Product, Integer>, JpaSpecificationExecutor<Product> {
}
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public List<Product> findByTitle(String locale, String titleToSearch) {
return productRepository.findAll((Root<ProductCategory> root, CriteriaQuery<?> query, CriteriaBuilder builder) -> {
return builder.equal(builder.function("jsonb_extract_path_text", String.class, root.<String>get("title"), builder.literal(locale)), titleToSearch);
});
}
}
我使用spring-data使用Query Hints的方式如上,
@Repository
public interface ProductRepository extends JpaRepository<Product, Integer>, JpaSpecificationExecutor<Product> {
@QueryHints(value = {
@QueryHint(name = org.eclipse.persistence.config.QueryHints.BATCH_TYPE, value = "JOIN"),
@QueryHint(name = org.eclipse.persistence.config.QueryHints.BATCH, value = "p.productCategory"),
@QueryHint(name = org.eclipse.persistence.config.QueryHints.BATCH, value = "p.productFileList")
}, forCounting = false)
@Query("SELECT p FROM Product p")
public List<Product> find();
}
我还发现了 this 尚未解决。
【问题讨论】:
-
您是否尝试过覆盖ProductRepository界面中的findAll并添加查询提示?
-
ProductRepository 接口是在运行时由spring数据实现的(spring字节码检测)。 Spring 数据支持使用 spring 数据文档中描述的过程进行自定义实现。我会发布答案,因为这是我的解决方案。
标签: java spring-data eclipselink specification-pattern