PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвам spring data jpa за заявка за колона jsonb?

Намерих много полезен Specification 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);
//      });
    }
}

Можете да намерите друг отговор за начина, по който трябва да използвате Spring Data тук.
Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Променете групата за защита на екземпляра на базата данни на AWS RDS

  2. PostgreSQL:подобряване на производителността на pg_dump, pg_restore

  3. часова зона по подразбиране на postgres

  4. Преглед на компилацията точно навреме (JIT) за PostgreSQL

  5. Заявка с LEFT JOIN не връща редове за брой 0