gpt4 book ai didi

java - 当我在此 Spring 应用程序中使用 JdbcTemplate BeanPropertyRowMapper 类时,为什么会出现此 InstantiationException?

转载 作者:行者123 更新时间:2023-12-01 09:44:10 27 4
gpt4 key购买 nike

我正在使用 Spring 开发批处理,并且在尝试使用映射的 Sping JdbcTemplateBeanPropertyRowMapper 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 类(class):

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

RowMapper implementation that converts a row into a new instance of the specified mapped target class. The mapped target class must be a top-level class and it must have a default or no-arg constructor.

看起来您错过了 TassoRendimentoInterno 中的无参数构造函数

关于java - 当我在此 Spring 应用程序中使用 JdbcTemplate BeanPropertyRowMapper 类时,为什么会出现此 InstantiationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206693/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com