사용자 도구

사이트 도구


java:hibernate:genericdao

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

java:hibernate:genericdao [2013/08/28 15:30] (현재)
kwon37xi 새로 만듦
줄 1: 줄 1:
 +====== Hibernate Generic Dao ======
 +  * https://​community.jboss.org/​wiki/​GenericDataAccessObjects
 +
 +===== Generic Dao Interface =====
 +<code java>
 +public interface GenericDAO<​T,​ ID extends Serializable>​ {  ​
 +  ​
 +    T findById(ID id, boolean lock);  ​
 +  ​
 +    List<​T>​ findAll();  ​
 +  ​
 +    List<​T>​ findByExample(T exampleInstance);  ​
 +  ​
 +    T makePersistent(T entity);  ​
 +  ​
 +    void makeTransient(T entity);  ​
 +}
 +</​code>​
 +
 +===== Generic Dao class =====
 +<code java>
 +public abstract class GenericHibernateDAO<​T,​ ID extends Serializable>  ​
 +        implements GenericDAO<​T,​ ID> {  ​
 +  ​
 +    private Class<​T>​ persistentClass;  ​
 +    private Session session;  ​
 +  ​
 +    public GenericHibernateDAO() {  ​
 +        this.persistentClass = (Class<​T>​) ((ParameterizedType) getClass()  ​
 +                                .getGenericSuperclass()).getActualTypeArguments()[0];  ​
 +     ​}  ​
 +  ​
 +    @SuppressWarnings("​unchecked"​)  ​
 +    public void setSession(Session s) {  ​
 +        this.session = s;  ​
 +    }  ​
 +  ​
 +    protected Session getSession() {  ​
 +        if (session == null)  ​
 +            throw new IllegalStateException("​Session has not been set on DAO before usage"​);  ​
 +        return session;  ​
 +    }  ​
 +  ​
 +    public Class<​T>​ getPersistentClass() {  ​
 +        return persistentClass;  ​
 +    }  ​
 +  ​
 +    @SuppressWarnings("​unchecked"​)  ​
 +    public T findById(ID id, boolean lock) {  ​
 +        T entity;  ​
 +        if (lock)  ​
 +            entity = (T) getSession().load(getPersistentClass(),​ id, LockMode.UPGRADE);  ​
 +        else  ​
 +            entity = (T) getSession().load(getPersistentClass(),​ id);  ​
 +  ​
 +        return entity;  ​
 +    }  ​
 +  ​
 +    @SuppressWarnings("​unchecked"​)  ​
 +    public List<​T>​ findAll() {  ​
 +        return findByCriteria();  ​
 +    }  ​
 +  ​
 +    @SuppressWarnings("​unchecked"​)  ​
 +    public List<​T>​ findByExample(T exampleInstance,​ String[] excludeProperty) {  ​
 +        Criteria crit = getSession().createCriteria(getPersistentClass());  ​
 +        Example example =  Example.create(exampleInstance);  ​
 +        for (String exclude : excludeProperty) {  ​
 +            example.excludeProperty(exclude);  ​
 +        }  ​
 +        crit.add(example);  ​
 +        return crit.list();  ​
 +    }  ​
 +  ​
 +    @SuppressWarnings("​unchecked"​)  ​
 +    public T makePersistent(T entity) {  ​
 +        getSession().saveOrUpdate(entity);  ​
 +        return entity;  ​
 +    }  ​
 +  ​
 +    public void makeTransient(T entity) {  ​
 +        getSession().delete(entity);  ​
 +    }  ​
 +  ​
 +    public void flush() {  ​
 +        getSession().flush();  ​
 +    }  ​
 +  ​
 +    public void clear() {  ​
 +        getSession().clear();  ​
 +    }  ​
 +  ​
 +    /** 
 +     * Use this inside subclasses as a convenience method. ​
 +     ​*/  ​
 +    @SuppressWarnings("​unchecked"​)  ​
 +    protected List<​T>​ findByCriteria(Criterion... criterion) {  ​
 +        Criteria crit = getSession().createCriteria(getPersistentClass());  ​
 +        for (Criterion c : criterion) {  ​
 +            crit.add(c);  ​
 +        }  ​
 +        return crit.list();  ​
 +   ​}  ​
 +  ​
 +}  ​
 +</​code>​
  
java/hibernate/genericdao.txt · 마지막으로 수정됨: 2013/08/28 15:30 저자 kwon37xi