Limba interogării de persistență Jakarta - Jakarta Persistence Query Language
| OS | Cross-platform |
|---|---|
| Site-ul web | eclipse-ee4j |
| Influențată de | |
| SQL , Hibernare | |
Jakarta Persistența Query Language ( JPQL , fostă Java Persistence Query Language) este o platformă independentă orientată spre obiect limbaj de interogare definit ca parte a Jakarta stăruinței (APP, fostă Java Persistence API) caietul de sarcini.
JPQL este utilizat pentru a face interogări împotriva entităților stocate într-o bază de date relațională. Este puternic inspirat de SQL , iar interogările sale seamănă cu interogările SQL în sintaxă, dar funcționează împotriva obiectelor entității JPA, mai degrabă decât direct cu tabelele bazei de date.
Pe lângă recuperarea obiectelor ( SELECTinterogări), JPQL acceptă seturi UPDATEși DELETEinterogări.
Exemple
Exemplu de clase JPA, getters și setere omise pentru simplitate.
@Entity
public class Author {
@Id
private Integer id;
private String firstName;
private String lastName;
@ManyToMany
private List<Book> books;
}
@Entity
public class Book {
@Id
private Integer id;
private String title;
private String isbn;
@ManyToOne
private Publisher publisher;
@ManyToMany
private List<Author> authors;
}
@Entity
public class Publisher {
@Id
private Integer id;
private String name;
private String address;
@OneToMany(mappedBy = "publisher")
private List<Book> books;
}
Apoi, o interogare simplă pentru a recupera lista tuturor autorilor, ordonată alfabetic, ar fi:
SELECT a FROM Author a ORDER BY a.firstName, a.lastName
Pentru a recupera lista autorilor care au fost publicate vreodată de XYZ Press:
SELECT DISTINCT a FROM Author a INNER JOIN a.books b WHERE b.publisher.name = 'XYZ Press'
JPQL acceptă parametrii numiți, care încep cu colon ( :). Am putea scrie o funcție returnând o listă de autori cu numele de familie dat după cum urmează:
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
...
public List<Author> getAuthorsByLastName(String lastName) {
String queryString = "SELECT a FROM Author a " +
"WHERE a.lastName IS NULL OR LOWER(a.lastName) = LOWER(:lastName)";
TypedQuery<Author> query = getEntityManager().createQuery(queryString, Author.class);
query.setParameter("lastName", lastName);
return query.getResultList();
}
Limbajul hibernării interogării
JPQL se bazează pe limbajul de interogare Hibernate (HQL), un limbaj de interogare anterioară non-standard inclus în biblioteca de mapare obiect-relațională Hibernate .
Hibernate și HQL au fost create înainte de specificația JPA. Începând cu Hibernate 3, JPQL este un subset al HQL.