Giriş
JPQL'de veritabanındaki sütun isimleri değil, nesnemideki field isimler kullanılır. Örneğin order by yapmak isteyelim. Nesnemizin alan ismi creationTime olsun. Veritabanındaki sütun ismi ise CREATION_TIME olsun.
JPQL'de veritabanındaki sütun isimleri değil, nesnemideki field isimler kullanılır. Örneğin order by yapmak isteyelim. Nesnemizin alan ismi creationTime olsun. Veritabanındaki sütun ismi ise CREATION_TIME olsun.
" ... order by c.creationTime"
şeklinde kullanırız.floor
Açıklaması şöyle
Açıklaması şöyle
There are several improvements and new capabilities in the querying capabilities. Jakarta Persistence QL (JPQL) has new numeric functions such as CEILING, FLOOR, ROUND, and new functions to handle date and time (along with compatible methods via criteria API). For dates, for example, the SQL types LOCAL DATE, LOCAL TIME and LOCAL DATETIME can be retrieved by functions as java.time.LocalDate, java.time.LocalTime and java.time.LocalDateTime, respectively.
like
Şöyle yaparız.
Şöyle yaparız.
public List<Employee> getFirstNamesLike(String firstName) {
Query query = entityManager.createNativeQuery("SELECT em.* FROM
spring_data_jpa_example.employee as em " +
"WHERE em.firstname LIKE ?", Employee.class);
query.setParameter(1, firstName + "%");
return query.getResultList();
}
like
Şöyle yaparız.
DTO için şöyle yaparız.
Şöyle yaparız.
JPA JPQL Join yazısına taşıdım
SELECT e from MyEntity e WHERE LOWER(e.myAttribute) ...
selectDTO için şöyle yaparız.
@Query("select n from Client n where n.nom like :x")
Hibernate HQL ile arasındaki en büyük fark select n kelimesinin kullanılması. HQL'deki şu cümlefrom Client n where n.nom=:x order by description asc"
şu hale geliyorselect n from Client n where n.nom=:x order by description asc"
select ve joinŞöyle yaparız.
@Query("select a from A a join a.bs b where b.prop1 = :prop1 and ...")
select ve left joinJPA JPQL Join yazısına taşıdım
select ve JPA Tuple
JPA Tuple için şöyle yaparız.
1. DTO projection ne zaman gerekir ?
- Örneğin Eager OneToMany ilişki varsa ve bu ilişkiyi göndermek istemiyorsak
- Nesnenin tüm alanları yerine belli bir kısmını göndermek istiyorsak
2. JPQL Nasıl Olmalı
Önce bir DTO sınıfı tanımlanır. DTO sınıfı tüm alanları dahil eden bir constructor sağlamalıdır. Yani AllArgsConstructor gerekir çünkü JPQL içinde bu constructor kullanılır.
Daha sonra JPQL içinde DTO'nun tüm paket ismini kullanmak gerekir çünkü JPA sağlayıcısı bu paketi tanımamaktadır.
Örnek
DTO Projection için şöyle yaparız.
Elimizde şöyle bir kod olsun.
JPA Tuple için şöyle yaparız.
"select p.id as id, p.title as title from Post p where p.createdOn > :fromTimestamp"
select ve DTO Projection1. DTO projection ne zaman gerekir ?
- Örneğin Eager OneToMany ilişki varsa ve bu ilişkiyi göndermek istemiyorsak
- Nesnenin tüm alanları yerine belli bir kısmını göndermek istiyorsak
2. JPQL Nasıl Olmalı
Önce bir DTO sınıfı tanımlanır. DTO sınıfı tüm alanları dahil eden bir constructor sağlamalıdır. Yani AllArgsConstructor gerekir çünkü JPQL içinde bu constructor kullanılır.
Daha sonra JPQL içinde DTO'nun tüm paket ismini kullanmak gerekir çünkü JPA sağlayıcısı bu paketi tanımamaktadır.
Örnek
DTO Projection için şöyle yaparız.
"select new com.foo.PostDTO (p.id as id, p.title) from Post p where
p.createdOn > :fromTimestamp"
ÖrnekElimizde şöyle bir kod olsun.
public class ProgramDTO {
private Long id;
private String programTitle;
private String description;
private String programType;
private String price;
}
EntityManager ile şöyle yaparız. Burada kısa olsun diye JPQL'de DTO'nun tüm paket ismini yazmadım.entityManager
.createQuery("select new ProgramDTO(p.id, p.programTitle, p.description,
p.programType, p.price from Program p")
.getResultList();
Hiç yorum yok:
Yorum Gönder