package org.transgalactica.management.data.people.dao;
import java.util.List;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;
import org.transgalactica.management.data.people.bo.EmployeEntity;
import org.transgalactica.management.data.people.bo.EmployeSummary;
import org.transgalactica.management.data.people.bo.impl.AbstractJpaEmployeEntity;
import org.transgalactica.management.data.people.dao.impl.EmployeDaoCustom;
@org.springframework.stereotype.Repository
public interface EmployeDao extends Repository<AbstractJpaEmployeEntity, Long>, EmployeDaoCustom {
EmployeEntity findByMatricule(Long matricule);
void save(EmployeEntity employeEntity);
void delete(EmployeEntity employeEntity);
@Query("select distinct new org.transgalactica.management.data.people.bo.BasicEmployeSummary(e.matricule, e.nom, e.dateEmbauche, e.type)" //
+ " from AbstractJpaEmployeEntity e inner join e.vaisseaux v" //
+ " where v.modele = :modele"//
+ " order by e.matricule")
List<EmployeSummary> findEmployesByModeleDeVaisseau(@Param("modele") String modele);
@Query("select distinct new org.transgalactica.management.data.people.bo.BasicEmployeSummary(e.matricule, e.nom, e.dateEmbauche, e.type)" //
+ " from AbstractJpaEmployeEntity e inner join e.vaisseaux v" //
+ " where v is not null and v.class=JpaVaisseauIntergalactiqueEntity" //
+ " order by e.matricule")
List<EmployeSummary> findEmployesOfVaisseauIntergalactique();
List<EmployeEntity> findAll(Specification<AbstractJpaEmployeEntity> spec);
}