2014-01-15 3 views
0

Hibernate 4와 함께 Spring 3.1.1과 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"); 

: 여기 내 쿼리입니다 열은 ID, _ 이름, check_date, EVENT_DATE, 상태 및 끝에 메시지 문자열입니다

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

. .

결과는 ArrayList<Object[]>으로 이동하여 행의 엔터티를 가져 오기 위해 row[0] 등을 읽습니다. 문자열 메시지는 29 자리 이후에 잘리지 않으므로 혼란 스럽습니다. 왜 문자열을 자르고 어떻게 해결할 수 있습니까? 내 데이터베이스에는 문자열이 가득 차 있으며 최대 400 자까지 입력 할 수 있습니다.

이것이 내 데이터베이스를 쿼리하는 가장 좋은 방법은 아닐지 모르지만 작동하기 때문에 내 응용 프로그램에 적용됩니다.

답변

1

길이가없는 varchar을 사용하고 있습니다. 절대 이것을하십시오!

교체 :

CAST(event_type.type_name AS varchar) 

을 같은으로 : 어떤 상황에서

CAST(event_type.type_name AS varchar(255)) 

는 기본 길이는하지만, 일반적으로 1. 항상 를 지정 일부에서 32입니다 길이.

는 편집 :

사실, 당신은 아마 심지어 cast 필요하지 않습니다. select 목록에 의 정보가 표시되지 않는 이유는 무엇입니까?

+0

트릭을 해 주셔서 감사합니다. 내가 "org.hibernate.MappingException : JDBC 유형에 대한 Dialect 매핑이 없습니다 : -9"를 얻었 기 때문에 캐스트해야합니다. 또 다른 방법은 addScalar를 사용하는 것입니다.하지만 시도하지 않았습니다. 캐스트는 처음에 찾은 답변이었습니다. 내가 너의 대답을 업 그레 이드 할 수 있다면. – confuse