PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak używać jpa danych wiosennych do zapytania kolumny jsonb?

Znalazłem bardzo przydatne interfejs API specyfikacji z danych wiosennych.
Załóżmy, że mamy jednostkę o nazwie Product oraz właściwość o nazwie title typu JSON(B).
Zakładam, że ta właściwość zawiera tytuł Produktu w różnych językach. Przykładem może być:{"EN":"Multicolor LED light", "EL":"Πολύχρωμο LED φώς"} .
Poniższy kod źródłowy znajduje produkt (lub więcej, jeśli nie jest to unikalne pole) według tytułu i ustawień regionalnych przekazanych jako argumenty.

@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);
//      });
    }
}

Możesz znaleźć inną odpowiedź na temat sposobu, w jaki powinieneś korzystać z danych Spring Data tutaj.
Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuwanie znaczników HTML w PostgreSQL

  2. Zdarzenie ROLLBACK wyzwalacze w postgresql

  3. Wybierz (pobierz) wszystkie rekordy z wielu schematów za pomocą Postgres

  4. Uprawnienia PostgreSQL i zarządzanie użytkownikami — co powinieneś wiedzieć

  5. Jak porównać bieżący wiersz z następnym i poprzednim wierszem w PostgreSQL?