JavaFX + Hibernate 제네릭 CRUD 와 DAO 구현
GenericHibernateDAO 구현
클라이언트가 DAO 를 사용하기 전에 Session을 설정하지 않았으면 DAO 코드에서 Session이 필요할 때 Session을 가져온다.
public abstract class GenericHibernateDAO<T, ID extends Serializable> implements GenericDAO<T, ID>{
private Session session;
private final Class<T> persistentClass;
@SuppressWarnings("unchecked")
public GenericHibernateDAO(){
this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public void setSession(Session session){
this.session = session;
}
protected Session getSession(){
if(session == null){
session = HibernateUtil.getSessionFactory().openSession();
}
return session;
}
public Class<T> getPersistentClass(){
return persistentClass;
}
// 하이버네이트 실제 CRUE 기능 구현
@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();
}
@SuppressWarnings("unchecked")
protected List<T> findByCriteria(Criterion... criterion){
Criteria crit = getSession().createCriteria(getPersistentClass());
for(Criterion c: criterion){
crit.add(c);
}
return crit.list();
}
}
모든 데이터는 getSession()을 사용해서 DAO에 할당돼 있는 Session을 가져온다.
DAO 구현하기
public interface ItemDAO extends GenericDAO<Item, String> {
String getItem(String id);
}
public class HibernateDAO extends GenericHibernateDAO<Item, String> implements ItemDAO {
public String getItem(String id){
Query q = getSession().getNamedQuery("id");
q.setParameter("id", id);
return q.uniqueResult();
}
}
'JavaFX' 카테고리의 다른 글
[JavaFX] com sun javafx css parser CSSParser declaration (0) | 2020.06.22 |
---|---|
[JavaFX] 자바FX + Hibernate - ids for this class must be manually assigned before calling save() 에러 (0) | 2020.06.19 |
[JavaFX] 자바 FX Not on FX application thread; currentThread = Thread - 7 (0) | 2020.06.09 |
[JavaFX] 자바FX Task ProgressBar 팝업 만들기 (0) | 2020.05.27 |
[JavaFX] 자바fx background image styleClass로 변경 (0) | 2020.05.18 |