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

Как да филтрирате колона с масив на PostgreSQL с API за JPA критерии?

Според спецификациите на JPA 2.0:

Въпреки това създадох работещ пример в GitHub използвайки Hibernate.

Ако приемем, че имаме това CalendarEvent обект и MailingCode 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;
    }
}

Можете да напишете кода на API за критерии, както следва:

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

Въпреки това, IN заявка е много по-добър избор, тъй като SQL заявката по-горе не е оптимална.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да импортирам JSON файл в PostgreSQL?

  2. Добавяне на външен ключ към релсов модел

  3. Кеш на план за изпълнение за PL/pgSQL функции в PostgreSQL

  4. Показване на резултати от клиентска заявка на PSQL 8.3+

  5. INSERT a SELECT GROUP BY :повече целеви колони, отколкото изрази грешка