我知道BeanPropertyRowmapper
使用setter
方法解除select
查询但是否使用getter
方法?
我面临以下问题:
在database
中,defaultPriority位于string
,但我想在int
pojo类中设置SMSAction
值。
class SMSAction implements Serializable {
private int defaultPriority;
public int getDefaultPriority() {
System.out.println("Inside getDefaultPriority()");
return defaultPriority;
}
public void setDefaultPriority(String defaultPriority) {
System.out.println("Inside setDefaultPriority(String defaultPriority)"+defaultPriority);
if(defaultPriority.equalsIgnoreCase("L")){
System.out.println("Condition");
this.defaultPriority = 1;
}
}
}
这是我得到的错误:
Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select SMSACTIONID,SMSACTIONCODE,ACTIONDESC,CASID,DEFAULTPRIORITY from tblsmsaction]; SQL state [99999]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
如果在数据库和我的pojo中数据类型不同时如何解决上述问题?
当我将 return type of getDefaultPriority()
更改为String
然后正常工作但我无法理解为什么BeanPropertyRowMapper
使用{ {1}}以及我在getDefaultPrioriy()
内打印的log
未显示。
注意:我不想制作自定义行映射器或休眠或JPA。 请帮帮我。
答案 0 :(得分:0)
在我看来,你做的事情(不是很)是错的。您的模板中有某些规则到set
的内容(阅读class
)。 Setters / Getters应该非常整洁;您需要存储int
这一事实但是您正在应用一些规则来确定int
值与您在bean中设置/获取该特定值的方式无关
每当您从数据库中获取String
值时,请应用规则并调用setter:
// [db layer] here you already got the real value(s) through a database call
SMSAction action = new SMSAction();
// priority is some arbitrary name I used to simulate the variable that holds the String coming from the database
if (priority.equalsIgnoreCase("L")) {
action.setDefaultPriority(1);
}
// ...
现在,有些人更喜欢另一层中的那种商业规则,但这是一个不同的主题;正如您所看到的那样,在DTO /包装器对象或类似物品中,可以轻松地将值从一层转移到另一层。
祝你好运!