2017-10-14 6 views
0

SpringBootでネイティブクエリをDTOに戻そうとしています。 しかし、私のSessionFactoryはnullを返しています。 私はここで多くの質問を読んだが、誰も助けてくれないようだ。SpringブートSessionFactory NullPointerを返す

私はここで間違っていますか?

application.properties

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 

SessionFactoryConfig.class

import org.hibernate.SessionFactory; 
import org.hibernate.jpa.HibernateEntityManagerFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
public class SessionFactoryConfig { 

    @Bean 
    public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) { 
     return hemf.getSessionFactory(); 
    } 
} 

ReportAverageCost.class

import lombok.*; 
import org.hibernate.SQLQuery; 
import org.hibernate.SessionFactory; 
import org.hibernate.transform.ResultTransformer; 
import org.hibernate.transform.Transformers; 
import org.springframework.beans.factory.annotation.Autowired; 

import java.util.Date; 
import java.util.List; 

@Getter 
@Setter 
@AllArgsConstructor 
@NoArgsConstructor 
@Builder 
public class ReportAverageCost { 

    @Autowired 
    private SessionFactory sessionFactory; 

    public Date date; 

    public List getReportAverageCost() throws Exception { 
     String q = "SELECT (...)"; 

     SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(q); 
     query.addScalar("date"); 
     ResultTransformer aliasToBean = Transformers.aliasToBean(ReportAverageCost.class); 
     List result = query.setResultTransformer(aliasToBean).list(); 
     return result; 
    } 
} 

答えて

1

ReportAverageCostクラスに注釈@Componentを定義してください。

+0

おかげ@Sagarそれが働いたdidntの。私は別の解決策を見つけて答えとして投稿した –

0

このサイトは私を助けた:https://blog.pranavek.com/using-hibernate-sessionfactory-in-spring-boot-app/

コードは次のようになった私だから:

application.properties

spring.jpa.properties.hibernate.current_session_context_class=thread 

ReportAverageCostRepository.class

@Repository 
public class ReportAverageCostRepository { 

    @Autowired 
    private SessionFactory sessionFactory; 

    public List getReportAverageCost() throws Exception { 
     String q = "SELECT (...)"; 

     Session session = this.sessionFactory.getCurrentSession(); 
     session.beginTransaction(); 

     SQLQuery query = session.createSQLQuery(q); 
     query.addScalar("date"); 
     query.addScalar("transactionIdentifier"); 
     query.addScalar("amount"); 
     query.addScalar("cost"); 
     query.addScalar("price"); 

     ResultTransformer aliasToBean = Transformers.aliasToBean(ReportAverageCost.class); 
     List result = query.setResultTransformer(aliasToBean).list(); 

     session.getTransaction().commit(); 

     return result; 
    } 

} 

ReportAverageCostController.class

@RestController 
@RequestMapping(value = "/api/v1/reports/averageCost") 
public class ReportAverageCostController { 

    @Autowired 
    ReportAverageCostRepository reportAverageCostRepository; 

    @RequestMapping(value = "/{pair}", method = RequestMethod.GET) 
    public List<ReportAverageCost> reportAverageCost() throws Exception { 
     return reportAverageCostRepository.getReportAverageCost(); 
    } 
} 
関連する問題