2014-01-15 50 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