2016-09-17 9 views
0

Мне нужно сохранить длинный текст в сущности с использованием HSQL, но он не работает.Не удается сохранить CLOB в hsql с JPA

Вот мой JPA аннотацию

@Entity 
public class DocPart extends AbstractEntity{ 
....  
    /** 
    * the text of this docPart, exctract from the comment in the odt. 
    */ 
    @Column(columnDefinition = "clob") 
    @Lob 
    private String text; 
.... 
} 

Когда я сохранить этот объект

docPart.setId(1); 
docPart.setText("A text that could be large"); 
entityManager.persist(docPart); 

и проверить в базе данных вместо текста я получаю это

SELECT text FROM "PUBLIC"."DOCPART" 
text 
======================================= 
[email protected] 

Я получаю эту JDBCClobClient @ 37c0372c вместо текста «Текст, который может быть большим»

Любая идея?

+0

Что было вызвано SQL для его сохранения? Что такое "entityManager.save (...)"? Что такое код для его получения? Что такое поставщик JPA? ... –

+0

Провайдер JPA - это спящий режим, я ошибся - это entityManager.persist(). DDL создается определением сущности. Вызываемый SQL - это вставка в значения DocPart (id, annotationName, author, doc_id, pageEnd, pageStart, text) (по умолчанию,?,?,?,?,?,?) –

+0

Если я использую это определение столбца @Column (columnDefinition = «LONGVARCHAR») длинный текст правильно вставлен в базу данных, но LONGVARCHAR не переносится. –

ответ

0

Похоже, что он работает нормально и данные правильно вставлены. [email protected] показывает, что данные сохраняются в CLOB. Чтобы получить текст, вы вызываете методы getXXX() объекта. Размер CLOB может быть гибабайтом или более, поэтому обычной практикой является извлечение содержимого с помощью объекта Reader из clob.

+0

А, ок! Я использовал GUI для проверки содержимого столбца. Я не пробовал игру getXXX. Я думаю, что если я отступлю через JPA, это сработает. Я попробую и дам вам знать. Благодарю. –