2010-01-21 6 views
7

웹 애플리케이션에서, 사용자가 채운 내용이 Hibernate가있는 DB에 궁극적으로 유지되는 텍스트 영역이있다. 나는 사용자 입력이 특정 길이를 초과 할 때 영속성이 실패한다는 문제에 봉착했다. Hibernate Annotations 또는 구성을 통해이 특정 필드가 더 긴 문자열을 지원해야 함을 나타낼 수있는 방법이 있는가? 그리고 데이터베이스 열 유형에이를 반영해야 하는가?Hibernate를 사용하여 긴 문자열을 지속 시키는데 문제가있다

@Column(length=1000) 

또는 같은 것으로 열 유형을 변경할 수 :

Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'introText' at row 1 
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2007) 
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443) 
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) 
    ... 41 more 
+0

은 왜 실패라고합니까 : –

+0

사용자 컨텐트는 String 객체로 설정됩니다. 지속성 중에 예외가 발생합니다. – lupefiasco

+0

게시물에 예외를 넣을 수 있습니까? :) 그리고 아마도 당신의 현재 매핑에서 발췌 문장. –

답변

20

당신은과 같이, 주석에 길이 매개 변수를 사용할 수 있습니다 여기에

내가지고있어 예외입니다 데이터베이스가 지원하는 경우 텍스트 :

@Column(columnDefinition="text") 

hbm2ddl 업데이트를 사용하는 경우 대신 해당 유형을 사용하도록 열이 만들어집니다 (데이터베이스 관련).

+2

그냥 보완해야한다. 여기서 int는 길이가 필요하므로 @Column (length = 1000) – Thomas

+1

우리 프로젝트에서는 psql 데이터베이스가 지정된 크기가 아닌 일부 열에 대해 VARCHAR 유형을 사용하도록하고 싶다. 이를 위해 우리는 다음을 사용합니다 : @Column (columnDefinition = "VARCHAR") – mahler

+0

특히 PostgreSQL에서 "varchar"는 "text"와 동일합니다. http://stackoverflow.com/questions/4848964/postgresql-difference-between-text-and-varchar-character-varying – tgharold

0

ok 실제로 DB 오류입니다.

Data too long for column 'introText' 

DB의 introText 열을 확인하십시오. 아마도 크기가 제한된 varchar 일 것입니다. 저장소 유형을 더 큰 것으로 변경해야 텍스트가 잘리지 않습니다.

그렇게 생각하지 않는다면 매핑과 스키마를 보여줘야합니다.

@Type(type="text") 
5

나는 내가 속성에 최대 절전 모드 "텍스트"유형을 할당하여 해결 유사한 문제가 있었다? 백엔드에서 자동으로 문자열을 자르거나 오류 메시지가 나타 납니까? hibernate에게 문자열 타입이라는 것을 알려 주면 모든 것을 저장하려고 시도 할 것이다.