2015-01-21 63 views
4

我知道BeanPropertyRowmapper使用setter的方法當我點火select查詢但是使用getter方法BeanPropertyRowMapper如何在Spring內部工作?

我面臨的問題如下:

database,defaultPriority是string但我想在我的SMSAction POJO類設置int值。

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使用getDefaultPrioriy()也是我log印刷內部getDefaultPriority()不顯示

注意:我不想讓自定義行映射器或休眠或JPA。 請幫幫我。

+2

這基本上與Spring沒有任何關係,但是與Java Bean規範有關,它指出getter/setter的類型必須匹配。 – 2015-01-21 11:49:02

+0

@ M.Deinum目前我還沒有做過SMSAction(它的pojo類)的bean,所以爲什麼需要匹配getter/setter? – 2015-01-22 06:17:53

+0

因爲這是它在Java Bean Specification中指定的方式,所以需要匹配getter/setter的類型。在設置Java Bean Spec應用的屬性時,它是否是一個bean並不重要。 – 2015-01-22 07:10:35

回答

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 /包裝器對象或類似的東西中將值從一層傳輸到另一層。

祝你好運!