方法已从Hibernate 4.0.1Hibernate.createBlob()
中弃用并移至. 任何解决方案我应该在方法内部传递什么,即代替 Session,或者任何其他显示如何使用 Spring 和 Hibernate 检索图像并将其保存到 DB 中的解决方案。Hibernate.getLobCreator(Session session).createBlob()
getLobCreator(Session session)
问问题
13550 次
1 回答
5
根据这个简单的教程,
会话对象
会话用于获取与数据库的物理连接。Session 对象是轻量级的,设计为在每次需要与数据库交互时实例化。 持久对象通过 Session 对象进行保存和检索。
会话对象不应长时间保持打开状态,因为它们通常不是线程安全的,应根据需要创建和销毁它们。
在 Hibernate 4.0+ 中,您可以Session
从SessionFactory
. 让我们为此任务编写一个方便的类。
package your.company.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
ServiceRegistry registry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(registry);
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}
}
然后:
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
byte[] bFile = /* load image into byte array */;
Blob image = Hibernate.getLobCreator(session).createBlob(bFile);
/* ? Your actions with Blob ? */
session.getTransaction().commit();
让我知道,如果它有效。
或者(假设Employee
是一个带有字段的 POJO @Lob private byte[] photo;
,绑定到相应的表):
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
byte[] bFile = /* load image into byte array */;
Employee employee = new Employee();
employee.setPhoto(bFile);
session.save(employee);
session.getTransaction().commit();
来自mkyong.com的信息。在这里您可以找到如何将图像保存到数据库中的完整示例。以及如何检索图像的示例。
注意:对于 Hibernate 4.3+,您的代码try
块内的代码略有变化。因为 classServiceRegistryBuilder
被StandardServiceRegistryBuilder
.
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
于 2014-12-02T15:12:11.280 回答