package com.smilonet.common.dao.jpa;
import java.io.Serializable;
import java.util.List;
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 com.smilonet.common.entity.IPersistable;
public interface BaseDao<T extends IPersistable<ID>, ID extends Serializable> {
public T getReference(ID id);
T find(ID id);
List<T> find(final Specification<T> spec);
List<T> find(Iterable<ID> ids);
boolean exists(ID id);
List<T> findAll();
List<T> findAll(Sort sort);
T findOne(final Specification<T> spec);
List<T> find(final Specification<T> spec, Sort sort);
Page<T> findAll(Pageable pageable);
Page<T> find(final Specification<T> spec, Pageable pageable);
void refresh(final T entity);
long countAll();
long count(final Specification<T> spec);
void delete(ID id);
void delete(T entity);
void deleteInBatch(Iterable<? extends ID> entityIds);
void deleteAll();
void deleteAllInBatch();
void flush();
<S extends T> S save(S entity);
<S extends T> List<S> save(Iterable<S> entities);
T saveAndFlush(T entity);
<S extends T> List<S> saveAndFlush(Iterable<S> entities);
void flushAndClear();
}