У меня возникли проблемы с правильным получением данных BLOB-объектов из моей базы данных с использованием Java в моем приложении JSF 2.0. Первая проблема, с которой я столкнулся, - это метод получения для BLOB-объекта с именем «file». Я получаю сообщение об ошибке, в котором говорится, что «Базовые атрибуты могут быть только следующих типов ...», говоря, что я не могу вернуть объект Blob. Мой код выглядит так, как показано ниже. Даже с ошибкой мой код компилируется. Я создал тестовый метод (последний бит кода ниже) и попытался проверить, но он дает мне ошибки во время выполнения.
Контроллер Бин
import java.sql.Blob;
@Entity
@Table(named = "files")
@NamedQueries( {
@NamedQuery(name = "MyBlob.getBlob",
query = from MyBlob WHERE fileId =: fileId")
})
public class MyBlob implements Serializable {
private Integer fileId;
private Blob file;
...
public Integer getFileId() {
return fileId;
}
public void setFileId() {
this.fileId = fileId;
}
public Blob getFile() {
return file;
}
public void setFile(Blob file) {
this.file = file;
}
....
}
BlobDao.java Метод файла для получения BLOB-объекта
public MyBlob getBlob(Integer fileId) throws HibernateException {
Session session = getSessionFactory().openSession();
try {
MyBlob blob = (MyBlob)session.getNamedQuery("MyBlob.getBlob").setInteger("fileId", fileId).uniqueResult();
return blob;
} catch(HibernateException e) {
throw new HibernateException(e);
} finally {
session.close();
}
}
TestDao.java
@Test
public void testBlob() {
MyBlob test = blobdao.getBlob(1); // 1 is a fileId that exists in the DB with a blob image file.
Blob blob = test.getFile();
try {
System.out.println(blob.length)); //this prints a number but I dont think the right one.
if(blob.length > 0 ) {
System.out.println(blob.toString() ); //errors out here
}
} catch(SQLException e) {
return System.out.println("Failed");
}
}
Я не уверен, что я все делаю правильно. Любая помощь будет отличной. Благодаря.