PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để lọc cột mảng PostgreSQL bằng API tiêu chí JPA?

Theo thông số kỹ thuật JPA 2.0:

Tuy nhiên, tôi đã tạo một ví dụ hoạt động trên GitHub sử dụng Hibernate.

Giả sử chúng ta có CalendarEvent này thực thể và MailingCode Đối tượng DTO:

@Entity(name = "CalendarEvent")
@Table
public static class CalendarEvent implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @ElementCollection
    private final List<Integer> mailingCodes = new ArrayList<>();

}

public static class MailingCode {
    private Integer id;

    public MailingCode(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }
}

Bạn có thể viết mã API tiêu chí như sau:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<CalendarEvent> criteria = builder.createQuery(CalendarEvent.class);
Root<CalendarEvent> root = criteria.from(CalendarEvent.class);

List<MailingCode> mailingCodes = Arrays.asList(
    new MailingCode(1),
    new MailingCode(2),
    new MailingCode(3)
);

Expression<List<Integer>> mailingCodesPath = root.get("mailingCodes");

Predicate predicate = builder.conjunction();

for(MailingCode mailingCode: mailingCodes){
    predicate = builder.and(predicate, builder.isMember(mailingCode.getId(), mailingCodesPath));
}

criteria.where(predicate);
List<CalendarEvent> events = entityManager.createQuery(criteria).getResultList();

Tuy nhiên, truy vấn IN là lựa chọn tốt hơn nhiều vì truy vấn SQL ở trên là không tối ưu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả về RDSdataService execute_statement (BadRequestException)

  2. Hàm trong PostgreSQL để chèn từ bảng này sang bảng khác?

  3. ĐẶT HÀNG THEO các cột đôi khi trống bằng Active Record &Rails

  4. Loại bỏ các hàng trùng lặp trong Postgres

  5. PreparedStatement rất chậm, nhưng truy vấn thủ công nhanh chóng