我正在使用Spring 3.1.1与Hibernate 4和MSSQL数据库。最后,我已经能够在我的表中使用连接查询我的数据库,返回正确的答案。虽然它似乎没有返回我的消息的整个字符串,但削减了29/30位数。这是我的疑问:
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,event_date,status和末尾的消息字符串。 。
结果转到ArrayList<Object[]>
,我在其中阅读row[0]
等来获取行中的实体。字符串消息在29位数后被删除,这令人不安。为什么它会剪切字符串,我该如何解决这个问题呢?在我的数据库中,字符串存在于其中,并且最多可以包含400个字符。
我知道这可能不是查询我的数据库的最佳方式,但它可以为我的应用程序工作。
答案 0 :(得分:1)
您使用的varchar
没有长度。 从不这样做!
替换:
CAST(event_type.type_name AS varchar)
有类似的东西:
CAST(event_type.type_name AS varchar(255))
在某些情况下,默认长度为32.在某些情况下,它是1.通常,总是指定长度。
编辑:
实际上,您可能甚至不需要cast
。为什么不在event_type.type_name
列表中添加select
?