方法Hibernate.createBlob()
已弃用 Hibernate 4.0.1 并已移至Hibernate.getLobCreator(Session session).createBlob()
。任何解决方案我应该在方法getLobCreator(Session session)
内传递什么,即代替Session,或任何其他解决方案,显示如何使用Spring和Hibernate检索并将图像保存到数据库中。
答案 0 :(得分:4)
会话对象
会话用于获取与数据库的物理连接。 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
是一个带有字段@Lob private byte[] photo;
的POJO,绑定到相应的表格):
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
块内的代码稍有变化。因为课程ServiceRegistryBuilder
已被StandardServiceRegistryBuilder
替换。
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());