PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara memfilter kolom array PostgreSQL dengan API Kriteria JPA?

Menurut spesifikasi JPA 2.0:

Namun, saya membuat contoh kerja di GitHub menggunakan Hibernasi.

Dengan asumsi kita memiliki CalendarEvent entitas dan MailingCode Objek 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;
    }
}

Anda dapat menulis kode API Kriteria sebagai berikut:

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();

Namun, kueri IN adalah pilihan yang jauh lebih baik karena kueri SQL di atas kurang optimal.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Driver:[email protected] mengembalikan null untuk URL... Saat menerapkan boot musim semi ke Heroku

  2. fe_sendauth:tidak ada kesalahan yang diberikan kata sandi setelah menyiapkan database PostgreSQL di Cloud9 IDE

  3. Perbarui beberapa kolom dalam fungsi pemicu di plpgsql

  4. Hubungkan ke postgres dalam wadah buruh pelabuhan dari mesin Host

  5. masalah koneksi pgAdmin3