// Path: leitoor/src/main/java/br/com/delogic/leitoor/entidade/Aluno.java
// @Entity
// @DiscriminatorValue("ALUNO")
// public class Aluno extends Usuario {
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/entidade/Professor.java
// @Entity
// @DiscriminatorValue("PROFESSOR")
// public class Professor extends Aluno {
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/entidade/Turma.java
// @Entity
// public class Turma extends Identity<Integer> {
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_turma")
//     @SequenceGenerator(name = "seq_turma", sequenceName = "seq_turma", allocationSize = 1, initialValue = 1)
//     private Integer    id;
// 
//     @Column(length = 50)
//     private String     nome;
// 
//     @ManyToMany
//     @CollectionTable
//     private Set<Aluno> alunos;
// 
//     public Integer getId() {
//         return id;
//     }
// 
//     public void setId(Integer id) {
//         this.id = id;
//     }
// 
//     public String getNome() {
//         return nome;
//     }
// 
//     public void setNome(String nome) {
//         this.nome = nome;
//     }
// 
//     public Set<Aluno> getAlunos() {
//         return alunos;
//     }
// 
//     public void setAlunos(Set<Aluno> alunos) {
//         this.alunos = alunos;
//     }
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/repository/config/EntityRepository.java
// @NoRepositoryBean
// public interface EntityRepository<T extends Identifiable<Integer>, ID extends Serializable> extends Repository<T, ID> {
// 
//     /**
//      * Finds and returns an entity given his id
//      *
//      * @param id
//      *            to look for
//      * @return entity found or null
//      */
//     T findById(ID id);
// 
//     /**
//      * Creates an entity
//      *
//      * @param entity
//      *            to be created
//      * @return the entity created with its id filled in
//      */
//     T create(T entity);
// 
//     /**
//      * Creates entities in bulk execution
//      *
//      * @param entities
//      * @return
//      */
//     <C extends Collection<? extends T>> C create(C entities);
// 
//     /**
//      * Updates the entity values if there are any updates to be performed
//      *
//      * @param entity
//      * @return
//      */
//     T update(T entity);
// 
//     /**
//      * Updates the entities in bulk execution
//      *
//      * @param entities
//      * @return
//      */
//     <C extends Collection<? extends T>> C update(C entities);
// 
//     /**
//      * Deletes the entity values if there are any updates to be performed
//      *
//      * @param entity
//      * @return
//      */
//     T delete(T entity);
// 
//     /**
//      * Deletes the entities in bulk execution
//      *
//      * @param entities
//      * @return
//      */
//     Collection<? extends T> delete(Collection<? extends T> entities);
// 
// }


import java.util.List;
import org.springframework.data.jpa.repository.Query;
import br.com.delogic.leitoor.entidade.Aluno;
import br.com.delogic.leitoor.entidade.Professor;
import br.com.delogic.leitoor.entidade.Turma;
import br.com.delogic.leitoor.repository.config.EntityRepository;
package br.com.delogic.leitoor.repository;




public interface TurmaRepository extends EntityRepository<Turma, Integer> {

    List<Turma> findByAlunosIn(Aluno convidado);
    
    @Query(value="select distinct t.turma from Tarefa t where t.professor = ?1 ")
// Path: leitoor/src/main/java/br/com/delogic/leitoor/entidade/Aluno.java
// @Entity
// @DiscriminatorValue("ALUNO")
// public class Aluno extends Usuario {
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/entidade/Professor.java
// @Entity
// @DiscriminatorValue("PROFESSOR")
// public class Professor extends Aluno {
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/entidade/Turma.java
// @Entity
// public class Turma extends Identity<Integer> {
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_turma")
//     @SequenceGenerator(name = "seq_turma", sequenceName = "seq_turma", allocationSize = 1, initialValue = 1)
//     private Integer    id;
// 
//     @Column(length = 50)
//     private String     nome;
// 
//     @ManyToMany
//     @CollectionTable
//     private Set<Aluno> alunos;
// 
//     public Integer getId() {
//         return id;
//     }
// 
//     public void setId(Integer id) {
//         this.id = id;
//     }
// 
//     public String getNome() {
//         return nome;
//     }
// 
//     public void setNome(String nome) {
//         this.nome = nome;
//     }
// 
//     public Set<Aluno> getAlunos() {
//         return alunos;
//     }
// 
//     public void setAlunos(Set<Aluno> alunos) {
//         this.alunos = alunos;
//     }
// 
// }
// 
// Path: leitoor/src/main/java/br/com/delogic/leitoor/repository/config/EntityRepository.java
// @NoRepositoryBean
// public interface EntityRepository<T extends Identifiable<Integer>, ID extends Serializable> extends Repository<T, ID> {
// 
//     /**
//      * Finds and returns an entity given his id
//      *
//      * @param id
//      *            to look for
//      * @return entity found or null
//      */
//     T findById(ID id);
// 
//     /**
//      * Creates an entity
//      *
//      * @param entity
//      *            to be created
//      * @return the entity created with its id filled in
//      */
//     T create(T entity);
// 
//     /**
//      * Creates entities in bulk execution
//      *
//      * @param entities
//      * @return
//      */
//     <C extends Collection<? extends T>> C create(C entities);
// 
//     /**
//      * Updates the entity values if there are any updates to be performed
//      *
//      * @param entity
//      * @return
//      */
//     T update(T entity);
// 
//     /**
//      * Updates the entities in bulk execution
//      *
//      * @param entities
//      * @return
//      */
//     <C extends Collection<? extends T>> C update(C entities);
// 
//     /**
//      * Deletes the entity values if there are any updates to be performed
//      *
//      * @param entity
//      * @return
//      */
//     T delete(T entity);
// 
//     /**
//      * Deletes the entities in bulk execution
//      *
//      * @param entities
//      * @return
//      */
//     Collection<? extends T> delete(Collection<? extends T> entities);
// 
// }


// Path: leitoor/src/main/java/br/com/delogic/leitoor/repository/TurmaRepository.java
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import br.com.delogic.leitoor.entidade.Aluno;
import br.com.delogic.leitoor.entidade.Professor;
import br.com.delogic.leitoor.entidade.Turma;
import br.com.delogic.leitoor.repository.config.EntityRepository;

package br.com.delogic.leitoor.repository;




public interface TurmaRepository extends EntityRepository<Turma, Integer> {

    List<Turma> findByAlunosIn(Aluno convidado);
    
    @Query(value="select distinct t.turma from Tarefa t where t.professor = ?1 ")
    List<Turma> findByTurmaByProfessor(Professor p);