問題描述:
Caused by: java.lang.IllegalArgumentException
at java.sql.Date.getHours(Date.java:143)
這是由於於java.util.Date 和 java.sql.Date的轉換問題造成的。
第一種解決方案,如果數據庫中存儲的是時間類型的話,就把hibernate的*.hbm.xml文件中的時間類型改成時間類型java.sql.Date改成java.util.Date。或者直接換成java.sql.Timestamp都成。
例如:
<key-property name="timeCs" type="java.sql.Date">
<column name="Time_CS" length="10" />
</key-property>
第二種如果某些情況數據庫中存儲的就是日期型的東西,沒辦法這種轉換就可以採用如下方法——採用通過JsonConfig註冊對應的Date類型java.sql.Date;
//定義配置文件,並且註冊時間類型
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
// resolve java.lang.IllegalArgumentException java.sql.Date.getHours(Date.java:177)
jsonConfig.registerJsonBeanProcessor(java.sql.Date.class, new DateJsonValueProcessor());
//resolve java.sql.SQLException: Positioned Update not supported.
jsonConfig.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
//進行轉換操作
JSONArray.fromObject(list,jsonConfig);
//重載類型
class DateJsonValueProcessor implements JsonBeanProcessor {
public JSONObject processBean(Object bean, JsonConfig arg1) {
JSONObject jsonObject = null;
if( bean instanceof java.sql.Date ){
bean = new Date( ((java.sql.Date) bean).getTime() );
}
if( bean instanceof java.sql.Timestamp ){
bean = new Date( ((java.sql.Timestamp) bean).getTime() );
}
if( bean instanceof Date ){
jsonObject = new JSONObject();
jsonObject.element("time", ( (Date) bean ).getTime());
}else{
jsonObject = new JSONObject( true );
}
return jsonObject;
}
}