2012-07-06 3 views
0

테스트를 위해 HSQLDB를 사용하고 있습니다. 데이터베이스는 봄부터 모델을 스캔하여 만들어집니다. 모델 중 하나는 첨부 파일을 포함하는 메시지입니다 (따라서 로브가 생깁니다). 첨부 파일이있는 메시지를 저장할 때 : org.hsqldb.HsqlException : 데이터 예외 : 문자열 데이터, 오른쪽 잘림. 첨부 파일은 최대 4kb입니다. 봄부터 hsql lob 필드의 크기 제한을 구성하는 방법이 있습니까? 나는 그 라인 (주석 첨부)이 모두 정상적으로 작동했기 때문에 예외가 첨부 파일에 의해 야기되었다고 확신한다. 스프링에서 HSQLDB를 사용할 때의 BLOB 크기 제한

내 스프링 구성 :

<bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
     autowire="autodetect"> 

    <property name="dataSource"> 
     <ref local="hsqlDbDataSource"/> 
    </property> 
</bean> 

<bean id="persistenceManager" 
     class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"> 
    <property name="ignoreResourceNotFound"> 
     <value>true</value> 
    </property> 
    <property name="location"> 
     <!-- You may use file:d:/temp/db.properties etc here --> 
     <value>classpath:dispatcher.model.db.properties</value> 
    </property> 
</bean> 

<!-- HSQLDB DS --> 
<bean id="hsqlDbDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
    <property name="url" value="jdbc:hsqldb:mem:dispatcher"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
    <property name="initialSize" value="20"/> 
    <property name="maxActive" value="10"/> 
    <property name="poolPreparedStatements" value="true"/> 
    <property name="maxOpenPreparedStatements" value="10"/> 
</bean> 

<!-- Hibernate SessionFactory --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="hsqlDbDataSource"/> 

    <property name="packagesToScan"> 
     <list> 
      <value>com.company.project.dispatcher.model.**.*</value> 
     </list> 
    </property> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="hibernate.generate_statistics">true</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.cache.use_second_level_cache">true</prop> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
      <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop> 
      <prop key="hibernate.hbm2ddl.auto">create-drop</prop> 
     </props> 
    </property> 
</bean> 

메시지 모델 :

public class FaxMessage extends Message implements IFaxMessage { 

/** Serial Version UID. */ 
private static final long serialVersionUID = -558902226L; 

/** Field mapping. */ 
private Long gatewayMessageId; 
/** Field mapping. */ 
private Integer numberOfPages; 
/** Field mapping. */ 
private Boolean pdfAttached; 
/** Field mapping. */ 
private Byte[] pdfData; 
/** Field mapping. */ 
private String subject; 
/** Field mapping. */ 
private String tiffFileLocation; 

...

/** 
* Return the value associated with the column: pdfData. 
* @return A Byte[] object (this.pdfData) 
*/ 
@Basic(optional = true) 
@Column(name = "pdf_data" ) 
public Byte[] getPdfData() { 
    return this.pdfData; 

} 

/** 
* Set the value related to the column: pdfData. 
* @param pdfData the pdfData value you wish to set 
*/ 
public void setPdfData(final Byte[] pdfData) { 
    this.pdfData = pdfData; 
} 

감사

+0

모델 정의를 게시 할 수 있습니까? – Nick

+0

확실히 BLOB를 사용하고 있습니까? DDL이 생성되는 것을 볼 수 있습니까? @Lob 어노테이션을 속성에 추가하여 명시 적으로 만드십시오. – Nick

답변

2

바이트 배열은 자동으로 LOB에 매핑되지 않습니다. 속성에 @Lob 주석을 추가해야 할 수도 있습니다.

+0

@Lob을 추가 한 후에 모든 것이 잘되었습니다! 이제'@ Lob'을 추가하도록 자동 생성기에 지시하는 방법을 알아야합니다. 감사 ! –

0

그에게 아무있는 경우 나도 몰라 당신의 문제와 함께, 그러나 :

대신 Byte[]을 왜 원하는가요? 엄청난 오버 헤드가 있고 아무 것도 얻지 못했습니다. 나는 Byte 개체 배열을 처리하는 라이브러리를 알지 못합니다. 형식을 byte[]으로 변경해야합니다!

+0

모델은 mysql 데이터베이스에서 자동 생성됩니다. 나는 그것이 어떤 타입을 사용하는지에 대한 통제권이 없다. 즉, 필자는 'Byte []'를 필요하다면 'byte []'로 바꿨다. –

+0

@DanielCarabott는 그렇게 생각 했었지만, 한번 시도해 볼 가치가있었습니다 –