Hibernate를 일반적으로 사용하는 올바른 방법은 무엇인가에 대한 많은 예제, 튜토리얼 및 코멘트가 있습니다. 그래서 나는 당신이 내 코드를보고 그것을 올바르게 사용하고 있는지 또는 잘못된 방법으로 사용하고 있는지 확인해주기 바란다.
EDIT 최대 절전 모드를 혼자 사용하고 있습니다. 4 최대 절전 모드 :)Hibernate를 사용하는 "올바른 방법"
public class HibernateUtil {
private static SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
System.out.println("Building new SessionFactory !!");
Configuration configuration = null;
ServiceRegistry serviceRegistry = null;
try{
configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
}catch(Exception e){
e.printStackTrace();
}
return new Configuration().configure().buildSessionFactory(serviceRegistry);
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
//Since thread unsafe
/**
* thread safe or unsafe ?
* assuming thread safe
* @return
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void tryCloseAll(Session s, Transaction t){
try{
if(t!=null){
if(t.isActive()){
//?
try{
t.commit();
System.out.println("HibernateUtil.tryCloseAll():: Transaction successfully committed.");
}catch(Exception e){
System.out.println("HibernateUtil.tryCloseAll():: Exception thrown while trying to commit a transaction.");
}finally{
t = null;
System.out.println("HibernateUtil.tryCloseAll():: Transaction successfully nullified.");
}
}
}else{
System.out.println("HibernateUtil.tryCloseAll():: The method has received a null transaction");
}
if(s!=null){
if(s.isOpen()){
try{
s.close();
System.out.println("HibernateUtil.tryCloseAll():: Session successfully closed.");
}catch(Exception e){
System.out.println("HibernateUtil.tryCloseAll():: Tried to close session and failed");
}finally{
s = null;
System.out.println("HibernateUtil.tryCloseAll():: Session successfully nullified.");
}
}
}else{
System.out.println("HibernateUtil.tryCloseAll():: The method has received a null session");
}
}catch(Exception e){
}
}
내 DAO 클래스
public class SuperItemDAO extends MSSQLDAO implements InterfaceSuperItemDAO{
private SessionFactory sessionFactory = null;
public static SuperItemDAO getInstance(){
if(INSTANCE == null){
INSTANCE = new SuperItemDAO();
}
return INSTANCE;
}
SuperItemDAO(){
if(sessionFactory == null){
sessionFactory = HibernateUtil.getSessionFactory();
}
}
public SuperItemVO get(int id){
SuperItemVO sivo = null;
Session session = null;
Transaction transaction = null;
try{
session = sessionFactory.getCurrentSession();
transaction = session.getTransaction();
transaction.begin();
Criteria criteria = session.createCriteria(SuperItemVO.class);
criteria.add(Restrictions.eq("id", id));
sivo = (SuperItemVO)criteria.uniqueResult();
transaction.commit();
}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.tryCloseAll(session, transaction);}
return sivo;
}
최대 절전 모드를 단독으로 사용 하시겠습니까? 아니면 스프링으로 사용합니까? – Sikorski
@Sikorski, 내 편집 좀 봐. – Ascendant
'올바른 방법'은 최대 절전 모드를 사용하지 마십시오. – jackalope