Tôi thấy api Đặc điểm kỹ thuật từ dữ liệu mùa xuân rất hữu ích.
Giả sử chúng ta có một thực thể có tên Product
và thuộc tính có tên title
thuộc loại JSON (B).
Tôi giả sử rằng thuộc tính này chứa tiêu đề của Sản phẩm bằng các ngôn ngữ khác nhau. Ví dụ có thể là:{"EN":"Multicolor LED light", "EL":"Πολύχρωμο LED φώς"}
.
Mã nguồn bên dưới tìm một sản phẩm (hoặc nhiều hơn trong trường hợp nó không phải là trường duy nhất) theo tiêu đề và ngôn ngữ được truyền dưới dạng đối số.
@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);
// });
}
}
Bạn có thể tìm thấy câu trả lời khác về cách bạn nên sử dụng Dữ liệu mùa xuân tại đây.
Hy vọng điều đó sẽ hữu ích.