sql >> データベース >  >> RDS >> PostgreSQL

スプリングデータjpaを使用してjsonb列をクエリするにはどうすればよいですか?

    春のデータから仕様APIが非常に役立つことがわかりました。
    Productという名前のエンティティがあるとします。 およびtitleという名前のプロパティ タイプはJSON(B)です。
    このプロパティには、さまざまな言語での製品のタイトルが含まれていると思います。例:{"EN":"Multicolor LED light", "EL":"Πολύχρωμο LED φώς"}
    以下のソースコードは、引数として渡されたタイトルとロケールによって(または一意のフィールドでない場合はそれ以上の)製品を検索します。

    @Repository
    public interface ProductRepository extends JpaRepository<Product, Integer>, JpaSpecificationExecutor<Product> {
    }
    
    
    public class ProductSpecification implements Specification<Product> {
    
        private String locale;
        private String titleToSearch;
    
        public ProductSpecification(String locale, String titleToSearch) {
            this.locale = locale;
            this.titleToSearch = titleToSearch;
        }
    
        @Override
        public Predicate toPredicate(Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            return builder.equal(builder.function("jsonb_extract_path_text", String.class, root.<String>get("title"), builder.literal(this.locale)), this.titleToSearch);
        }
    }
    
    
    @Service
    public class ProductService {
    
        @Autowired
        private ProductRepository productRepository;
    
        public List<Product> findByTitle(String locale, String titleToSearch) {
            ProductSpecification cs = new ProductSpecification(locale, titleToSearch);
            return productRepository.find(cs);
            // Or using lambda expression - without the need of ProductSpecification class.
    //      return productRepository.find((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);
    //      });
        }
    }
    

    SpringDataの使用方法に関する別の回答はここにあります。
    お役に立てば幸いです。



    1. SQLServerのストアドプロシージャでテキストを検索する

    2. SQLのデータ型のサイズを変更します

    3. Javaクロス集計-プリペアドステートメントクエリ

    4. SQL ServerでのACOS()の例