[SPRING] Spring 3 주석 - HibernateDaoSupport - 저장소가 세션 팩토리를 필요로 함
SPRINGSpring 3 주석 - HibernateDaoSupport - 저장소가 세션 팩토리를 필요로 함
나는 예외를 말하고있다 :
HibernateDaoSupport 클래스에서 @Repository 주석을 사용하려고 할 때. 이 오류 메시지는 저장소를 생성하기 위해 sessionFactory가 필요한 간단합니다. 그러나 XML에 세션 팩토리를 정의했습니다.
<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dashDataSource" />
<property name="annotatedClasses">
<list>
<value>com.mycomp.myapp.Category</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
따라서 저장소에 주석을 작성하는 동안 필요한 저장소 인 SessionFactory를 제공하는 방법을 잘 모르겠습니다. 다음을 시도했습니다.
@Autowired
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
return super.createHibernateTemplate(sessionFactory);
}
하지만 이것은 문제를 해결하지 못합니다. 왜냐하면 저장소가 작업을 수행 할 때뿐만 아니라 인스턴스화하는 동안 해당 속성을 필요로하기 때문일 수 있습니다. 불행히도, @Autowired 어노테이션으로 오버라이드 할 생성자 나 초기화 메소드가 없기 때문에이 문제를 해결하는 방법을 모른다.
sessionFactory 빈이 생성되고 Autowire가 될 수 있는지 확인했는데 괜찮습니다.
해결법
-
==============================
1.HibernateDaoSupport는 setSessionFactory ()를 통해 SessionFactory와 함께 제공된다. 그러나 setSessionFactory ()는 final이므로 @Autowired 주석을 추가하기 위해 재정의 할 수 없습니다. 그러나 임의의 메소드에 @Autowired를 적용하고 setSessionFactory ()를 호출 할 수 있습니다.
HibernateDaoSupport는 setSessionFactory ()를 통해 SessionFactory와 함께 제공된다. 그러나 setSessionFactory ()는 final이므로 @Autowired 주석을 추가하기 위해 재정의 할 수 없습니다. 그러나 임의의 메소드에 @Autowired를 적용하고 setSessionFactory ()를 호출 할 수 있습니다.
@Autowired public void init(SessionFactory factory) { setSessionFactory(factory); }
-
==============================
2.@Qualifier 주석을 사용하여 사용할 세션 팩토리를 정의 할 수도 있습니다 (예를 들어, 둘 이상인 경우).
@Qualifier 주석을 사용하여 사용할 세션 팩토리를 정의 할 수도 있습니다 (예를 들어, 둘 이상인 경우).
@Autowired public MyClassImpl(@Qualifier("myOtherSessionFactory") SessionFactory sessionFactory) { setSessionFactory(sessionFactory); }
AbstractRoutingDataSource를 확장하여 데이터 소스간에 전환 할 수도 있습니다. 이 페이지를 참조하십시오.
from https://stackoverflow.com/questions/3230608/spring-3-annotations-hibernatedaosupport-repository-requires-session-factory by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] java.lang.Class는 java.lang.reflect.ParameterizedType에 캐스트 할 수 없습니다. (0) | 2019.02.05 |
---|---|
[SPRING] Spring RestTemplate이 XmlConverter를 사용하도록 강제 실행 (0) | 2019.02.05 |
[SPRING] Spring & annotation을 사용하여 속성 주입 @Value (0) | 2019.02.05 |
[SPRING] JSTL을 사용하여 jsp 내부의 목록 요소를 얻는 방법? (0) | 2019.02.05 |
[SPRING] Spring / JPA / Mysql / Tomcat 앱에서 Connection Closed Exception 분석하기 (0) | 2019.02.05 |