HibernateDaoSupport
에 getSession()
을 사용하여 몇 가지 큰 문제를 일으켰습니다. 이제 수정 해 보려고합니다.이 추상적 분류를 작성하고 모든 Dao가 각 Dao에 SessionFactory
을 추가하는 대신 확장해야하는지 궁금합니다. ?각 DAO 또는 확장 클래스의 Hibernate의 SessionFactory?
그렇다면,이 추상적 인 Dao 클래스의 bean을 생성하고 세션 팩토리를 전달하면 다른 Dao가 그것을 확장 한 후에 작업 할 수 있습니까? 아니면 불가능한가?
public abstract class AbstractDAOImpl<T> implements
AbstractDAO<T> {
private static Logger _logger = LoggerFactory
.getLogger(AbstractDAOImpl.class);
private SessionFactory factory;
@Override
public void refresh(final T object) {
try {
factory.getCurrentSession().refresh(object);
} catch (Exception e) {
_logger.error("Cannot refresh object " + object, e);
}
}
@Override
public void remove(final T object) {
try {
factory.getCurrentSession().delete(object);
} catch (Exception e) {
_logger.error("Cannot remove object " + object, e);
}
}
@Override
public void save(final T object) {
try {
factory.getCurrentSession().saveOrUpdate(object);
} catch (Exception e) {
_logger.error("Cannot save or update object " + object, e);
}
}
}
나는 이것이 훨씬 더 좋은 방법이라고 말할 수 있습니다. 여러 프로젝트에서 비슷한 추상 루트 DAO 클래스를 사용했습니다. – fmucar
@fmucar, okay 그리고 root dao 클래스에서 sessionFactory를 얻으려면 bean을 만들고 sessionFactory를 전달해야합니다. 또는 루트 DAO 클래스를 확장 할 때 각 DAO 클래스가 다른 인스턴스를 작성하기 때문에 작동하지 않습니다. – Rihards
나는 스프링을 사용하여 sessionfactory 인스턴스가 스프링 컨텍스트에서오고 자동으로 주입되도록했다. 따라서 DI를 사용하고 있지 않다면 세션 팩토리에 대한 참조를 유지하고 생성시 DAO에 전달해야합니다. – fmucar