2011-04-29 7 views
1

나는 Spring과 Hibernate를 통합하려고한다. 내 spring.xml은 다음과 같습니다 HibernateTemplate 문제

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value> 
       resources/User.hbm.xml 
       <!-- Project.hbm.xml ProjCF.hbm.xml Task.hbm.xml TaskCF.hbm.xml Category.hbm.xml 
        TaskEstimation.hbm.xml ProjectEstimation.hbm.xml Parameter.hbm.xml StatisticTool.hbm.xml 
        Report.hbm.xml --> 
      </value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

<bean id="myUserDAO" class="main.java.com.gwt.app.server.User"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

그리고 내 사용자 클래스에 :

public void setSessionFactory(SessionFactory sessionFactory){ 
    this.hibernateTemplate = new HibernateTemplate(sessionFactory); 
} 

public User loadUser(String log){ 
    return (User)hibernateTemplate.load("User", log); 
} 

문제는 HibernateTemplate에가 null이다가, 사람이 나를 도울 수 ???? 미리 감사드립니다.

답변

4

당신은 new User()를 호출하지 않아야하지만 빈에 대한 봄을 요청해야 (appContext.getBean("myUserDAO", User.class))

0

봄 XML의 최대 절전 모드 템플릿을 정의뿐만 아니라 새로운 키워드를 사용하지 마십시오. 다음은 샘플 구성 및 클래스입니다.

<bean id="yourHibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory"> 
     <ref bean="yourSessionFactory"/> 
    </property> 
</bean> 

<bean id="yourRootDAO" class="woc.dao.base.RootDAOImpl" abstract="true"> 
    <property name="hibernateTemplate" ref="yourHibernateTemplate"/> 
</bean> 

<bean id="comboValueDAO" parent="yourRootDAO" class="woc.dao.impl.ComboValueDAOImpl" /> 



import java.io.Serializable; 
import java.lang.reflect.Method; 
import java.util.Collection; 
import java.util.List; 

import org.apache.log4j.Logger; 
import org.springframework.orm.hibernate3.HibernateCallback; 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 


public abstract class RootDAOImpl<T> extends HibernateDaoSupport implements RootDAO<T> { 

    protected Logger logger = Logger.getLogger(getClass()); 
    private Class<T> clazz; 

    public RootDAOImpl(Class<T> clazz) { 
     this.clazz = clazz; 
    } 

    public void delete(T entity) { 
     //Mark entity as deleted 
     try{ 
      Method setDeletedMethod = clazz.getDeclaredMethod("setDeleted", Boolean.class); 
      setDeletedMethod.invoke(entity, true); 
      getHibernateTemplate().saveOrUpdate(entity);   
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     //actually delete 
//  getHibernateTemplate().delete(entity); 
    } 
    @Override 
    public void deleteAll(Collection<T> entities) { 
     getHibernateTemplate().deleteAll(entities); 
    } 
    @Override 
    public void saveOrUpdateAll(Collection<T> entities) { 
     getHibernateTemplate().saveOrUpdateAll(entities); 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public T get(Serializable id) { 
     return (T)getHibernateTemplate().get(clazz, id); 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public T load(Serializable id) { 
     return (T)getHibernateTemplate().load(clazz, id); 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public List<T> find(String hql){ 
     return (List<T>)getHibernateTemplate().find(hql); 
    }  
    @Override 
    public Object execute(HibernateCallback action) { 
     return getHibernateTemplate().execute(action); 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public List<T> findByNamedParam(String queryString, String paramName,Object value) { 
     return getHibernateTemplate().findByNamedParam(queryString, paramName, value); 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public List<T> findByNamedParam(String queryString, String[] paramNames,Object[] values) { 
     return getHibernateTemplate().findByNamedParam(queryString, paramNames, values); 
    }  
    @SuppressWarnings("unchecked") 
    @Override 
    public List<T> getByExampleList(T entity) { 
     return getHibernateTemplate().findByExample(entity); 
    } 
    @Override 
    public T getByExampleUnique(T entity) { 
     return null; 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public List<T> listAll() { 
     return getHibernateTemplate().loadAll(clazz); 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<T> loadAll() { 
     return getHibernateTemplate().loadAll(clazz); 
    } 
    @SuppressWarnings("unchecked") 
    @Override 
    public T save(T entity) { 
     return (T)getHibernateTemplate().save(entity);  
    } 
    @Override 
    public void saveOrUpdate(T entity) { 
     getHibernateTemplate().saveOrUpdate(entity); 
    } 
    @Override 
    public void update(T entity) { 
     getHibernateTemplate().update(entity); 
    } 
} 



import java.io.Serializable; 
import java.util.Collection; 
import java.util.List; 

import org.springframework.orm.hibernate3.HibernateCallback; 

public interface RootDAO<T> { 

    public List<T> loadAll(); 

    public T save(T entity); 

    public void delete(T entity); 

    public T get(Serializable id); 

    public T load(Serializable id); 

    public void saveOrUpdate(T entity); 

    public void deleteAll(Collection<T> entities); 

    public void saveOrUpdateAll(Collection<T> entities); 

    public List<T> find(String hql); 

    public void update(T entity); 

    public T getByExampleUnique(T entity); 

    public List<T> getByExampleList(T entity); 

    public List<T> listAll(); 

    public Object execute(HibernateCallback action); 

    public List<T> findByNamedParam(String queryString, String paramName,Object value); 

    public List<T> findByNamedParam(String queryString, String[] paramNames,Object[] values); 
} 



public interface ComboValueDAO extends RootDAO<ComboValue>{ 

} 


public class ComboValueDAOImpl extends RootDAOImpl<ComboValue> implements ComboValueDAO { 

    public ComboValueDAOImpl() { 
     super(ComboValue.class); 
    } 

} 

코드에서 getHibernateTemplate()을 사용하고 필요한 작업을 수행하십시오.