2016-07-05 7 views
0

봄 사용하여 개발과 좀 문제가 데이터베이스의 필드 클래스의 속성을 매핑 JdbcTemplate을 및 BeanPropertyRowMapper 봄 클래스를 스핑 을 사용하여 쿼리의 개체의 목록을 얻기 위해 노력하고 있습니다 표.이 Spring 애플리케이션에서 JdbcTemplate BeanPropertyRowMapper 클래스를 사용할 때이 InstantiationException을 얻는 이유는 무엇입니까? 내가 배치 작업입니다

그래서, 내 데이터베이스 (마이크로 소프트 SQL 서버)에서 나는 다음과 같은 데이터 유형을 다음과 같은 열이 포함되어 TassoRendimentoInterno라는 이름의 테이블이 있습니다

ID bigint 
Conferimento nvarchar 
PolizzaID bigint 
ControvaloreQuote decimal 
percRendimentoInizioSottoscrizione money 
percRendimentoInizioAnno money 
percRendimentoInizioTrimestre money 
AnnoRiferimento int 
TipoRendimento nchar 
TipoTrasmissione nchar 
FlagQuoteOK bit 
DataInizioposizione datetime 
DataInizioAnno datetime 
DataInizioTrimestre datetime 
DataFinePosizione datetime 
QuotePuc decimal 
DataRiferimentoNavPUC datetime 
TIMESTAMP datetime 
controvalorePUC money 
dataRiferimentoNavTIR datetime 
DataRiferimentoFlusso datetime 

가 그럼 난라는 이름의이 클래스와이 테이블을 mappped 한을 TassoRendimentoInterno : 그럼

public class TassoRendimentoInterno { 

    private String conferimento; 
    private long polizzaID; 
    private BigDecimal controvaloreQuote; 
    private BigDecimal percRendimentoInizioSottoscrizione; 
    private BigDecimal percRendimentoInizioAnno; 
    private BigDecimal percRendimentoInizioTrimestre; 
    private int annoRiferimento; 
    private String tipoRendimento; 
    private String tipoTrasmissione; 
    private boolean flagQuoteOK; 
    private Timestamp dataInizioposizione; 
    private Timestamp dataInizioAnno; 
    private Timestamp dataInizioTrimestre; 
    private Timestamp dataFinePosizione; 
    private BigDecimal quotePuc; 
    private Timestamp dataRiferimentoNavPUC; 
    private Timestamp timestamp; 
    private BigDecimal controvalorePUC; 
    private Timestamp dataRiferimentoNavTIR; 
    private Timestamp dataRiferimentoFlusso; 


    public TassoRendimentoInterno(String conferimento, long polizzaID, 
      BigDecimal controvaloreQuote, 
      BigDecimal percRendimentoInizioSottoscrizione, 
      BigDecimal percRendimentoInizioAnno, 
      BigDecimal percRendimentoInizioTrimestre, int annoRiferimento, 
      String tipoRendimento, String tipoTrasmissione, 
      boolean flagQuoteOK, Timestamp dataInizioposizione, 
      Timestamp dataInizioAnno, Timestamp dataInizioTrimestre, 
      Timestamp dataFinePosizione, BigDecimal quotePuc, 
      Timestamp dataRiferimentoNavPUC, Timestamp timestamp, 
      BigDecimal controvalorePUC, Timestamp dataRiferimentoNavTIR, 
      Timestamp dataRiferimentoFlusso) { 
     super(); 
     this.conferimento = conferimento; 
     this.polizzaID = polizzaID; 
     this.controvaloreQuote = controvaloreQuote; 
     this.percRendimentoInizioSottoscrizione = percRendimentoInizioSottoscrizione; 
     this.percRendimentoInizioAnno = percRendimentoInizioAnno; 
     this.percRendimentoInizioTrimestre = percRendimentoInizioTrimestre; 
     this.annoRiferimento = annoRiferimento; 
     this.tipoRendimento = tipoRendimento; 
     this.tipoTrasmissione = tipoTrasmissione; 
     this.flagQuoteOK = flagQuoteOK; 
     this.dataInizioposizione = dataInizioposizione; 
     this.dataInizioAnno = dataInizioAnno; 
     this.dataInizioTrimestre = dataInizioTrimestre; 
     this.dataFinePosizione = dataFinePosizione; 
     this.quotePuc = quotePuc; 
     this.dataRiferimentoNavPUC = dataRiferimentoNavPUC; 
     this.timestamp = timestamp; 
     this.controvalorePUC = controvalorePUC; 
     this.dataRiferimentoNavTIR = dataRiferimentoNavTIR; 
     this.dataRiferimentoFlusso = dataRiferimentoFlusso; 
    } 
    public String getConferimento() { 
     return conferimento; 
    } 
    public void setConferimento(String conferimento) { 
     this.conferimento = conferimento; 
    } 
    public long getPolizzaID() { 
     return polizzaID; 
    } 
    public void setPolizzaID(long polizzaID) { 
     this.polizzaID = polizzaID; 
    } 
    public BigDecimal getControvaloreQuote() { 
     return controvaloreQuote; 
    } 
    public void setControvaloreQuote(BigDecimal controvaloreQuote) { 
     this.controvaloreQuote = controvaloreQuote; 
    } 
    public BigDecimal getPercRendimentoInizioSottoscrizione() { 
     return percRendimentoInizioSottoscrizione; 
    } 
    public void setPercRendimentoInizioSottoscrizione(
      BigDecimal percRendimentoInizioSottoscrizione) { 
     this.percRendimentoInizioSottoscrizione = percRendimentoInizioSottoscrizione; 
    } 
    public BigDecimal getPercRendimentoInizioAnno() { 
     return percRendimentoInizioAnno; 
    } 
    public void setPercRendimentoInizioAnno(BigDecimal percRendimentoInizioAnno) { 
     this.percRendimentoInizioAnno = percRendimentoInizioAnno; 
    } 
    public BigDecimal getPercRendimentoInizioTrimestre() { 
     return percRendimentoInizioTrimestre; 
    } 
    public void setPercRendimentoInizioTrimestre(
      BigDecimal percRendimentoInizioTrimestre) { 
     this.percRendimentoInizioTrimestre = percRendimentoInizioTrimestre; 
    } 
    public int getAnnoRiferimento() { 
     return annoRiferimento; 
    } 
    public void setAnnoRiferimento(int annoRiferimento) { 
     this.annoRiferimento = annoRiferimento; 
    } 
    public String getTipoRendimento() { 
     return tipoRendimento; 
    } 
    public void setTipoRendimento(String tipoRendimento) { 
     this.tipoRendimento = tipoRendimento; 
    } 
    public String getTipoTrasmissione() { 
     return tipoTrasmissione; 
    } 
    public void setTipoTrasmissione(String tipoTrasmissione) { 
     this.tipoTrasmissione = tipoTrasmissione; 
    } 
    public boolean isFlagQuoteOK() { 
     return flagQuoteOK; 
    } 
    public void setFlagQuoteOK(boolean flagQuoteOK) { 
     this.flagQuoteOK = flagQuoteOK; 
    } 
    public Timestamp getDataInizioposizione() { 
     return dataInizioposizione; 
    } 
    public void setDataInizioposizione(Timestamp dataInizioposizione) { 
     this.dataInizioposizione = dataInizioposizione; 
    } 
    public Timestamp getDataInizioAnno() { 
     return dataInizioAnno; 
    } 
    public void setDataInizioAnno(Timestamp dataInizioAnno) { 
     this.dataInizioAnno = dataInizioAnno; 
    } 
    public Timestamp getDataInizioTrimestre() { 
     return dataInizioTrimestre; 
    } 
    public void setDataInizioTrimestre(Timestamp dataInizioTrimestre) { 
     this.dataInizioTrimestre = dataInizioTrimestre; 
    } 
    public Timestamp getDataFinePosizione() { 
     return dataFinePosizione; 
    } 
    public void setDataFinePosizione(Timestamp dataFinePosizione) { 
     this.dataFinePosizione = dataFinePosizione; 
    } 
    public BigDecimal getQuotePuc() { 
     return quotePuc; 
    } 
    public void setQuotePuc(BigDecimal quotePuc) { 
     this.quotePuc = quotePuc; 
    } 
    public Timestamp getDataRiferimentoNavPUC() { 
     return dataRiferimentoNavPUC; 
    } 
    public void setDataRiferimentoNavPUC(Timestamp dataRiferimentoNavPUC) { 
     this.dataRiferimentoNavPUC = dataRiferimentoNavPUC; 
    } 
    public Timestamp getTimestamp() { 
     return timestamp; 
    } 
    public void setTimestamp(Timestamp timestamp) { 
     this.timestamp = timestamp; 
    } 
    public BigDecimal getControvalorePUC() { 
     return controvalorePUC; 
    } 
    public void setControvalorePUC(BigDecimal controvalorePUC) { 
     this.controvalorePUC = controvalorePUC; 
    } 
    public Timestamp getDataRiferimentoNavTIR() { 
     return dataRiferimentoNavTIR; 
    } 
    public void setDataRiferimentoNavTIR(Timestamp dataRiferimentoNavTIR) { 
     this.dataRiferimentoNavTIR = dataRiferimentoNavTIR; 
    } 
    public Timestamp getDataRiferimentoFlusso() { 
     return dataRiferimentoFlusso; 
    } 
    public void setDataRiferimentoFlusso(Timestamp dataRiferimentoFlusso) { 
     this.dataRiferimentoFlusso = dataRiferimentoFlusso; 
    } 
} 

나는 (즉,이 MainApp 클래스가 단순히 PucManager pucManager)라는 이름의 DAO 클래스를 구하십시오

public class MainApp { 

    private PucManager pucManager; 

    public static void main(String[] args) { 

     new MainApp().execute(); 

    } 

    private void execute() { 
     GenericXmlApplicationContext context = new GenericXmlApplicationContext(); 
     ConfigurableEnvironment conf = (ConfigurableEnvironment) context.getEnvironment(); 
     conf.setActiveProfiles("PROD"); 
     context.load("applicationContext.xml"); 
     context.refresh(); 

     HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); 
     obj.getMessage(); 

     pucManager = (PucManager) context.getBean("pucManager"); 

     List<TassoRendimentoInterno> tassoRendimentoInternoList = pucManager.getTassoRendimentoInterno(); 

     List<TassoInternoRendimentoFondo> tassoInternoRendimentoFondoList = pucManager.getTassoRendimentoInternoFondo(); 

     System.out.println("BATCH TERMINATO"); 
    } 
} 

을이 내 PucManager입니다 클래스 :

@Service 
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) 
public class PucManager extends JdbcDaoSupport { 

    private static Logger log = Logger.getLogger(PucManager.class); 
    private Connection con; 

    public PucManager() { 
     System.out.println("Costruzione PucManager"); 
    } 

    @Autowired 
    public PucManager(@Qualifier("dataSourcePUC") DataSource dataSource) { 
     setDataSource(dataSource); 

    } 

    public String testMethod() { 
     return "TEST OK"; 
    } 


    public List<TassoRendimentoInterno> getTassoRendimentoInterno() { 

     String sql = "select * from puc001.TassoRendimentoInterno " 
        + "where Polizzaid in (select id from polizza where prodottoid = '6v0u1')"; 

     List<TassoRendimentoInterno> tassoRendimentoInternoList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(TassoRendimentoInterno.class)); 

     return tassoRendimentoInternoList; 

    } 

    public List<TassoInternoRendimentoFondo> getTassoRendimentoInternoFondo() { 

     String sql = "select * from puc001.TassoInternoRendimentoFondo " 
        + "where Polizzaid in (select id from polizza where prodottoid = '6v0u1')"; 

     List<TassoInternoRendimentoFondo> tassoInternoRendimentoFondoList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(TassoInternoRendimentoFondo.class)); 

     return tassoInternoRendimentoFondoList; 

    } 

} 

문제는 그것이는 getTassoRendimentoInterno에이 명령을 수행 할 때() 방법 :

List<TassoRendimentoInterno> tassoRendimentoInternoList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper(TassoRendimentoInterno.class)); 

나는 스택 트레이스로이 조항을 얻습니다 :

Exception in thread "main" org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.mycompany.beans.TassoRendimentoInterno]: Is it an abstract class?; nested exception is java.lang.InstantiationException: com.mycompany.beans.TassoRendimentoInterno 
    at org.springframework.beans.BeanUtils.instantiate(BeanUtils.java:82) 
    at org.springframework.jdbc.core.BeanPropertyRowMapper.mapRow(BeanPropertyRowMapper.java:235) 
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92) 
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60) 
    at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:446) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:396) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:464) 
    at com.mycompany.dbmanager.PucManager.getTassoRendimentoInterno(PucManager.java:62) 
    at com.mycompany.dbmanager.PucManager$$FastClassBySpringCGLIB$$d6a10e62.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:700) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:132) 
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:120) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:633) 
    at com.mycompany.dbmanager.PucManager$$EnhancerBySpringCGLIB$$fbae53e4.getTassoRendimentoInterno(<generated>) 
    at com.mycompany.main.MainApp.execute(MainApp.java:37) 
    at com.mycompany.main.MainApp.main(MainApp.java:21) 
Caused by: java.lang.InstantiationException: com.mycompany.beans.TassoRendimentoInterno 
    at java.lang.Class.newInstance0(Class.java:340) 
    at java.lang.Class.newInstance(Class.java:308) 
    at org.springframework.beans.BeanUtils.instantiate(BeanUtils.java:79) 
    ... 19 more 

왜? 뭐가 잘못 되었 니? 내가 뭘 놓치고 있니? 이 문제를 어떻게 해결할 수 있습니까? BeanPropertyRowMapper 따르면

답변

1

, 지정된 맵핑 대상 클래스의 새로운 인스턴스에 행 변환

RowMapper의 구현. 매핑 된 대상 클래스는 최상위 클래스 여야하며 기본 또는 비 arg 생성자가 있어야합니다. 당신이 TassoRendimentoInterno

에 인수 없음의 생성자를 그리워처럼

이 보이는