사용자 도구

사이트 도구


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