TassoRendimentoInterno

TassoRendimentoInterno

我正在使用Spring开发的批处理上,尝试使用Sping JdbcTemplate和BeanPropertyRowMapper Spring类从查询中获取对象列表时遇到一些问题,这些类将类的属性映射到数据库表的字段。

因此,在我的数据库(Microsoft SQL Server)上,我有一个名为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


然后,我将此表映射到名为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));


我将这个专有权获取到stacktrace中:

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


RowMapper实现,可将行转换为的新实例
指定的映射目标类。映射的目标类必须是
顶级类,并且必须具有默认或无参数构造函数。


似乎您错过了TassoRendimentoInterno中的无参数构造函数

08-18 17:56