有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在这个Spring应用程序中使用JdbcTemplate BeanPropertyRowMapper类时获得这个实例化异常?

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

因此,在我的数据库(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

然后我用这个名为的类映射了这个表:

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");
    }
}

这是我的课程:

@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;

    }

}

问题是,当它尝试在GetTassOreIndicationOterno()方法中执行此指令时:

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

为什么?怎么了?我错过了什么?我如何解决这个问题


共 (0) 个答案