Какой тип записи данных с аннотацией @Lob с JPA?

У меня проблема, когда я записываю PDF-файл внутри банка, мне лучше сохранить как файл или байт []?

@Lob @Basic(fetch=FetchType.EAGER)
@Column(name="arqdocumento")
private File arquivo; 

or

@Lob
@Basic(fetch=FetchType.EAGER)
@Column(name="arqdocumento")
private byte[] arquivo; 

И как мне получить этот файл из базы данных и отобразить в браузере?

Интересно, почему я делаю это так:

public File getDocumentoBinary(int iDdocumento){
   Query consulta = getSesseion().createSQLQuery("SELECT arqdocumento FROM documento WHERE iddocumento = :id");
   consulta.setInteger("id", iDdocumento);
   return  (File) consulta.uniqueResult();     }

но отображает эту ошибку:

Вызвано: org.hibernate.MappingException: нет сопоставления диалектов для типа JDBC: -4


person MiguelCPJava    schedule 29.12.2012    source источник


Ответы (2)


@Lob
@Basic(fetch=FetchType.EAGER)  
@Column(name="arqdocumento")  
private byte[] arquivo;  

это правильный подход к хранению огромного количества данных в БД. Ваша ошибка говорит, что вы должны включить диалект в файл persistence.xml. Поэтому убедитесь, что вы ввели правильное свойство Dialect.

person MGPJ    schedule 29.12.2012
comment
Спасибо всем, но эта ошибка, я думаю, связана с запросом, существует ли другой способ поиска этого файла в базе данных с помощью Criteria API или другой способ? Я использую org.hibernate.dialect.MySQLDialect. - person MiguelCPJava; 29.12.2012
comment
Я нашел решение, запрос уверен, что причиной ошибки был компонент p: commandButton внутри p: dialog.Então изменил кнопку на h: commandButton и больше не имел ошибки. - person MiguelCPJava; 08.01.2013

Используйте массив байтов, InputStream или тип большого двоичного объекта SQL. Вы не можете сопоставить столбец больших двоичных объектов с файлом.

person Perception    schedule 29.12.2012