15 Nisan 2020 Çarşamba

SpringData JpaRepository ile @Query ve Join - OneToMany Tarzı İlişkilerde Kullanılır

Giriş
Normal JPQL sorgusu yazıyoruz. Bu yöntem bence custom method eklemekten daha kolay.

Bu sorgularda dikkat edilmesi gereken şeyler şöyle
1. Join ile her zaman alias kullanmak gerekir.
2. Positional parameter kullanmak istersek =?1 gibi yazmak gerekir.
3. Parametre ismini kullamak istersek =:myparameter gibi yazmak gerekir.
Örnek - inner join
Şöyle yaparız.
@Query("select w from Way w join w.relations r where r.relationID=?1")
List<Way> selectAllWaysByRelationID(Long relationID);
Açıklaması şöyle.
When using JOIN you need to use alias of Way with relations field like this, w.relations r instead of Way.relations.

Örnek - LEFT JOIN FETCH
Place ->has -> City -> has -> State ilişkisi olsun. Şöyle yaparız.
public interface PlaceRepository extends
 JpaRepository<Place, Long>, PlaceRepositoryCustom {

  @Query(value = "SELECT p FROM Place p LEFT JOIN FETCH p.author
                  LEFT JOIN FETCH p.city c LEFT JOIN FETCH c.state 
                  where p.id = :id")
  Place findById(@Param("id") int id);
}

public interface CityRepository extends JpaRepository<City, Long>,
 CityRepositoryCustom { 
  @Query(value = "SELECT c FROM City c LEFT JOIN FETCH c.state where c.id = :id")
  City findById(@Param("id") int id);
}

Hiç yorum yok:

Yorum Gönder