package org.transgalactica.management.data.materiel.dao; import java.util.List; import org.springframework.data.jpa.repository.Query; import org.springframework.data.querydsl.QueryDslPredicateExecutor; import org.springframework.data.repository.Repository; import org.springframework.data.repository.query.Param; import org.transgalactica.management.data.materiel.bo.HangarEntity; import org.transgalactica.management.data.materiel.bo.VaisseauEntity; import org.transgalactica.management.data.materiel.bo.VaisseauSummary; import org.transgalactica.management.data.materiel.bo.impl.JpaVaisseauEntity; import org.transgalactica.management.data.materiel.dao.impl.VaisseauDaoCustom; public interface VaisseauDao extends Repository<JpaVaisseauEntity, Long>, VaisseauDaoCustom, QueryDslPredicateExecutor<VaisseauEntity> { VaisseauEntity findByImmatriculation(String immatriculation); void save(VaisseauEntity vaisseauEntity); void delete(VaisseauEntity vaisseauEntity); @Query("select new org.transgalactica.management.data.materiel.bo.BasicVaisseauSummary(v.immatriculation, v.modele, v.hangar.localisation) " // + " from JpaVaisseauEntity v" // + " where v.hangar.localisation like :localisation" // + " order by v.immatriculation") List<VaisseauSummary> findByHangarLocalisationOrderByImmatriculation(@Param("localisation") String localisation); /** * L'interet de cette requete passe par l'utilisation du polymorphisme et de * la clause left join pour ramener les vaisseau non affecté à un hangar. */ @Query("select new org.transgalactica.management.data.materiel.bo.BasicVaisseauSummary(v.immatriculation, v.modele, h.localisation) " // + " from JpaVaisseauIntergalactiqueEntity v left join v.hangar h" // + " order by v.immatriculation") List<VaisseauSummary> findVaisseauxIntergalactique(); /** * select count(*) from JpaVaisseauEntity v where v.hangar = :hangar */ int countByHangar(HangarEntity hangar); /** * select count(*) from JpaVaisseauEntity v where v.hangar.localisation like * :localisation group by v.hangar.localisation */ int countByHangarLocalisation(String localisation); @Query("select new org.transgalactica.management.data.materiel.bo.BasicVaisseauSummary(v.immatriculation, v.modele) " // + " from JpaVaisseauEntity v" // + " where v.hangar is null" // + " order by v.immatriculation") List<VaisseauSummary> findByHangarIsNullOrderByImmatriculation(); }