2014-01-15 75 views
0

我正在使用Spring 3.1.1與Hibernate 4和MSSQL數據庫。最後,我已經能夠查詢我的數據庫與表中的聯接,返回正確的答案。雖然,它似乎沒有返回我的消息的整個字符串,但削減在29/30數字。這裏是我的查詢:SQL查詢結果中的字符數

SQLQuery sql = this.getCurrentSession().createSQLQuery(
      "SELECT event.id as eventid, CAST(event_type.type_name AS varchar) as eventtype, event.check_date, event.event_date, event.status, CAST(event_message.message AS varchar) as eventmessage " + 
      "FROM event_log event " + 
      "LEFT JOIN event_type " + 
      "ON (event.event_type_id = event_type.id) " + 
      "LEFT JOIN event_message " + 
      "ON (event.event_message_id = event_message.id) " + 
      "WHERE event.event_type_id = " + jobId + 
      "ORDER BY eventid"); 

的結果可能是:

4506 Database 2014-01-15 14:14:15.02 2014-01-15 14:14:15.02 false Database-connection cannot be 

其中列有ID,TASK_NAME,check_date,活動日期,狀態,並在年底的消息字符串。 。

結果轉到ArrayList<Object[]>,我讀row[0]等等來獲取行中的實體。字符串消息在29個數字之後被切斷,這是令人不安的。爲什麼它會切斷字符串,我該如何解決這個問題?在我的數據庫中,字符串存在於其中,並且最多有400個字符。

我知道這可能不是查詢我的數據庫的最佳方式,但它會爲我的應用程序,因爲它的工作原理。

回答

1

您正在使用varchar沒有長度。 千萬不要做到這一點!

替換:

CAST(event_type.type_name AS varchar) 

的東西,如:

CAST(event_type.type_name AS varchar(255)) 

在某些情況下,默認長度爲32。有些人來說是1.一般來說,雖然始終指定的長度。

編輯:

其實,你可能甚至不需要cast。爲什麼不在select列表中只有?

+0

謝謝,做到了!我需要投,因爲我得到「org.hibernate.MappingException:沒有Dialect映射的JDBC類型:-9」,如果我沒有。另一種方法是使用addScalar,但我沒有嘗試過,投射是我最初找到的答案。如果我能夠upvote你的答案,我會。 – confuse