// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/domain/EntityGraph.java
// public interface EntityGraph {
// 
//   /** @return The type of the entity graph. May be null. */
//   EntityGraphType getEntityGraphType();
// 
//   /** @return The name to use to retrieve the EntityGraph. May be null. */
//   String getEntityGraphName();
// 
//   /** @return The attribute paths. May be null. */
//   List<String> getEntityGraphAttributePaths();
// 
//   /**
//    * @return True if the EntityGraph is optional.<br>
//    *     Passing an optional EntityGraph to an unsupported method will not fail.
//    */
//   boolean isOptional();
// }
// 
// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/EntityGraphJpaRepository.java
// @NoRepositoryBean
// public interface EntityGraphJpaRepository<T, ID extends Serializable>
//     extends JpaRepository<T, ID>,
//         EntityGraphPagingAndSortingRepository<T, ID>,
//         EntityGraphQueryByExampleExecutor<T> {}
// 
// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/EntityGraphJpaSpecificationExecutor.java
// @NoRepositoryBean
// public interface EntityGraphJpaSpecificationExecutor<T> extends JpaSpecificationExecutor<T> {
// 
//   /** @see JpaSpecificationExecutor#findOne(Specification) */
//   Optional<T> findOne(Specification<T> spec, EntityGraph entityGraph);
// 
//   /** @see JpaSpecificationExecutor#findAll(Specification) */
//   List<T> findAll(Specification<T> spec, EntityGraph entityGraph);
// 
//   /** @see JpaSpecificationExecutor#findAll(Specification, Pageable) */
//   Page<T> findAll(Specification<T> spec, Pageable pageable, EntityGraph entityGraph);
// 
//   /** @see JpaSpecificationExecutor#findAll(Specification, Sort) */
//   List<T> findAll(Specification<T> spec, Sort sort, EntityGraph entityGraph);
// }


import com.cosium.spring.data.jpa.entity.graph.domain.EntityGraph;
import com.cosium.spring.data.jpa.entity.graph.repository.EntityGraphJpaRepository;
import com.cosium.spring.data.jpa.entity.graph.repository.EntityGraphJpaSpecificationExecutor;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;
package com.cosium.spring.data.jpa.entity.graph.repository.support;



/**
 * A {@link SimpleJpaRepository} that supports {@link EntityGraph} passed through method arguments.
 *
 * <p>Created on 22/11/16.
 *
 * @author Reda.Housni-Alaoui
 */
public class EntityGraphSimpleJpaRepository<T, ID extends Serializable>
    extends SimpleJpaRepository<T, ID>
    implements EntityGraphJpaRepository<T, ID>, EntityGraphJpaSpecificationExecutor<T> {

  public EntityGraphSimpleJpaRepository(
// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/domain/EntityGraph.java
// public interface EntityGraph {
// 
//   /** @return The type of the entity graph. May be null. */
//   EntityGraphType getEntityGraphType();
// 
//   /** @return The name to use to retrieve the EntityGraph. May be null. */
//   String getEntityGraphName();
// 
//   /** @return The attribute paths. May be null. */
//   List<String> getEntityGraphAttributePaths();
// 
//   /**
//    * @return True if the EntityGraph is optional.<br>
//    *     Passing an optional EntityGraph to an unsupported method will not fail.
//    */
//   boolean isOptional();
// }
// 
// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/EntityGraphJpaRepository.java
// @NoRepositoryBean
// public interface EntityGraphJpaRepository<T, ID extends Serializable>
//     extends JpaRepository<T, ID>,
//         EntityGraphPagingAndSortingRepository<T, ID>,
//         EntityGraphQueryByExampleExecutor<T> {}
// 
// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/EntityGraphJpaSpecificationExecutor.java
// @NoRepositoryBean
// public interface EntityGraphJpaSpecificationExecutor<T> extends JpaSpecificationExecutor<T> {
// 
//   /** @see JpaSpecificationExecutor#findOne(Specification) */
//   Optional<T> findOne(Specification<T> spec, EntityGraph entityGraph);
// 
//   /** @see JpaSpecificationExecutor#findAll(Specification) */
//   List<T> findAll(Specification<T> spec, EntityGraph entityGraph);
// 
//   /** @see JpaSpecificationExecutor#findAll(Specification, Pageable) */
//   Page<T> findAll(Specification<T> spec, Pageable pageable, EntityGraph entityGraph);
// 
//   /** @see JpaSpecificationExecutor#findAll(Specification, Sort) */
//   List<T> findAll(Specification<T> spec, Sort sort, EntityGraph entityGraph);
// }


// Path: core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/support/EntityGraphSimpleJpaRepository.java
import com.cosium.spring.data.jpa.entity.graph.domain.EntityGraph;
import com.cosium.spring.data.jpa.entity.graph.repository.EntityGraphJpaRepository;
import com.cosium.spring.data.jpa.entity.graph.repository.EntityGraphJpaSpecificationExecutor;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;

package com.cosium.spring.data.jpa.entity.graph.repository.support;



/**
 * A {@link SimpleJpaRepository} that supports {@link EntityGraph} passed through method arguments.
 *
 * <p>Created on 22/11/16.
 *
 * @author Reda.Housni-Alaoui
 */
public class EntityGraphSimpleJpaRepository<T, ID extends Serializable>
    extends SimpleJpaRepository<T, ID>
    implements EntityGraphJpaRepository<T, ID>, EntityGraphJpaSpecificationExecutor<T> {

  public EntityGraphSimpleJpaRepository(
      JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {