春のデータと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 を使用したクエリヒントの使用方法は上記のとおりです。
@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();
}
まだ解決されていないこれも見つけました。