// Path: src/main/java/yourwebproject2/framework/data/BaseHibernateJPARepository.java
// public abstract class BaseHibernateJPARepository<T extends Entity, ID extends Serializable> implements BaseJPARepository<T, ID> {
//     protected @Autowired
//     SessionFactory sessionFactory;
//     protected Class<T> clazz;
// 
// 
//     @SuppressWarnings("unchecked")
//     public void setupEntityClass(Class clazz) {
//         this.clazz = clazz;
//     }
// 
// 
//     public void delete(T object) {
//         sessionFactory.getCurrentSession().delete(object);
//     }
// 
// 
//     @Transactional
//     public T insert(T object) {
//         sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
//         sessionFactory.getCurrentSession().save(object);
//         sessionFactory.getCurrentSession().flush();
//         return object;
//     }
// 
// 
//     @Transactional
//     public T update(T object) {
//         sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
//         sessionFactory.getCurrentSession().update(object);
//         sessionFactory.getCurrentSession().flush();
//         return object;
//     }
// 
// 
//     @Transactional
//     public T insertOrUpdate(T object) {
//         sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
//         sessionFactory.getCurrentSession().saveOrUpdate(object);
//         sessionFactory.getCurrentSession().flush();
//         return object;
//     }
// 
// 
//     @Transactional(readOnly = true)
//     public T findById(ID id) {
//         return (T) sessionFactory.getCurrentSession().get(clazz, id);
//     }
// 
// 
//     public Collection<T> findAllByPage(int pageNum, int countPerPage, Order order) {
//         Criteria c = sessionFactory.getCurrentSession().createCriteria(clazz);
//         c.setMaxResults(countPerPage);
//         c.setFirstResult(pageNum * countPerPage);
//         return c.list();
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/entity/Category.java
// @Entity
// @Table(indexes = {  @Index(name="name_idx", columnList = "name", unique = true),
//         @Index(name="priority_idx", columnList = "priority"),
//         @Index(name="parentCategory_idx", columnList = "parent_category")})
// public class Category extends JPAEntity<Long> {
//     private String name;
//     private Integer priority;
//     private Category parentCategory;
// 
//     @NotNull @NotBlank
//     @Column
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     @NotNull
//     @Column
//     public Integer getPriority() {
//         return priority;
//     }
// 
//     public void setPriority(Integer priority) {
//         this.priority = priority;
//     }
// 
//     @ManyToOne(fetch = FetchType.EAGER)
//     public Category getParentCategory() {
//         return parentCategory;
//     }
// 
//     public void setParentCategory(Category parentCategory) {
//         this.parentCategory = parentCategory;
//     }
// 
//     @Override
//     public String toString() {
//         return "Category{" +
//                 "name='" + name + '\'' +
//                 ", priority=" + priority +
//                 ", parentCategory=" + parentCategory +
//                 '}';
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/repository/CategoryRepository.java
// public interface CategoryRepository extends BaseJPARepository<Category, Long> {
//     /**
//      * Finds a category with the given categoryName
//      *
//      * @param categoryName
//      * @return
//      */
//     public Category findByCategoryName(String categoryName);
// 
//     /**
//      * Finds a category with the given categoryPriority
//      *
//      * @param categoryPriority
//      * @return
//      */
//     public Category findByCategoryPriority(Integer categoryPriority);
// 
//     /**
//      * Finds sub categories with the given parentCategory
//      *
//      * @param parentCategory
//      * @return
//      */
//     public List<Category> findSubCategories(Category parentCategory);
// }


import yourwebproject2.framework.data.BaseHibernateJPARepository;
import yourwebproject2.model.entity.Category;
import yourwebproject2.model.repository.CategoryRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import java.util.List;
package yourwebproject2.model.repository.impl;



/**
 * Created by Y.Kamesh on 8/2/2015.
 */
@Repository
public class CategoryRepositoryImpl extends BaseHibernateJPARepository<Category, Long> implements CategoryRepository {
    private static Logger LOG = LoggerFactory.getLogger(CategoryRepositoryImpl.class);

    @PostConstruct
    public void setUp() {
        LOG.info("categoryRepository created..!");
    }

    @Override
// Path: src/main/java/yourwebproject2/framework/data/BaseHibernateJPARepository.java
// public abstract class BaseHibernateJPARepository<T extends Entity, ID extends Serializable> implements BaseJPARepository<T, ID> {
//     protected @Autowired
//     SessionFactory sessionFactory;
//     protected Class<T> clazz;
// 
// 
//     @SuppressWarnings("unchecked")
//     public void setupEntityClass(Class clazz) {
//         this.clazz = clazz;
//     }
// 
// 
//     public void delete(T object) {
//         sessionFactory.getCurrentSession().delete(object);
//     }
// 
// 
//     @Transactional
//     public T insert(T object) {
//         sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
//         sessionFactory.getCurrentSession().save(object);
//         sessionFactory.getCurrentSession().flush();
//         return object;
//     }
// 
// 
//     @Transactional
//     public T update(T object) {
//         sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
//         sessionFactory.getCurrentSession().update(object);
//         sessionFactory.getCurrentSession().flush();
//         return object;
//     }
// 
// 
//     @Transactional
//     public T insertOrUpdate(T object) {
//         sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
//         sessionFactory.getCurrentSession().saveOrUpdate(object);
//         sessionFactory.getCurrentSession().flush();
//         return object;
//     }
// 
// 
//     @Transactional(readOnly = true)
//     public T findById(ID id) {
//         return (T) sessionFactory.getCurrentSession().get(clazz, id);
//     }
// 
// 
//     public Collection<T> findAllByPage(int pageNum, int countPerPage, Order order) {
//         Criteria c = sessionFactory.getCurrentSession().createCriteria(clazz);
//         c.setMaxResults(countPerPage);
//         c.setFirstResult(pageNum * countPerPage);
//         return c.list();
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/entity/Category.java
// @Entity
// @Table(indexes = {  @Index(name="name_idx", columnList = "name", unique = true),
//         @Index(name="priority_idx", columnList = "priority"),
//         @Index(name="parentCategory_idx", columnList = "parent_category")})
// public class Category extends JPAEntity<Long> {
//     private String name;
//     private Integer priority;
//     private Category parentCategory;
// 
//     @NotNull @NotBlank
//     @Column
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     @NotNull
//     @Column
//     public Integer getPriority() {
//         return priority;
//     }
// 
//     public void setPriority(Integer priority) {
//         this.priority = priority;
//     }
// 
//     @ManyToOne(fetch = FetchType.EAGER)
//     public Category getParentCategory() {
//         return parentCategory;
//     }
// 
//     public void setParentCategory(Category parentCategory) {
//         this.parentCategory = parentCategory;
//     }
// 
//     @Override
//     public String toString() {
//         return "Category{" +
//                 "name='" + name + '\'' +
//                 ", priority=" + priority +
//                 ", parentCategory=" + parentCategory +
//                 '}';
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/repository/CategoryRepository.java
// public interface CategoryRepository extends BaseJPARepository<Category, Long> {
//     /**
//      * Finds a category with the given categoryName
//      *
//      * @param categoryName
//      * @return
//      */
//     public Category findByCategoryName(String categoryName);
// 
//     /**
//      * Finds a category with the given categoryPriority
//      *
//      * @param categoryPriority
//      * @return
//      */
//     public Category findByCategoryPriority(Integer categoryPriority);
// 
//     /**
//      * Finds sub categories with the given parentCategory
//      *
//      * @param parentCategory
//      * @return
//      */
//     public List<Category> findSubCategories(Category parentCategory);
// }


// Path: src/main/java/yourwebproject2/model/repository/impl/CategoryRepositoryImpl.java
import yourwebproject2.framework.data.BaseHibernateJPARepository;
import yourwebproject2.model.entity.Category;
import yourwebproject2.model.repository.CategoryRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import java.util.List;

package yourwebproject2.model.repository.impl;



/**
 * Created by Y.Kamesh on 8/2/2015.
 */
@Repository
public class CategoryRepositoryImpl extends BaseHibernateJPARepository<Category, Long> implements CategoryRepository {
    private static Logger LOG = LoggerFactory.getLogger(CategoryRepositoryImpl.class);

    @PostConstruct
    public void setUp() {
        LOG.info("categoryRepository created..!");
    }

    @Override
    public Category findByCategoryName(String categoryName) {