方法Hibernate.createBlob()在Hibernate 4.0.1中已弃用,并已移至Hibernate.getLobCreator(会话会话).createBlob()

Ank*_*ter 6 java hibernate

方法Hibernate.createBlob()Hibernate 4.0.1弃用并移至Hibernate.getLobCreator(Session session).createBlob().任何解决方案我应该在内部方法中传递什么getLobCreator(Session session),即代替Session,或任何其他解决方案,显示如何使用Spring和Hibernate检索并将图像保存到DB中.

naX*_*aXa 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();
    }

}
Run Code Online (Sandbox Code Playgroud)

然后:

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();
Run Code Online (Sandbox Code Playgroud)

让我知道,是否有效。

或(假设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();
Run Code Online (Sandbox Code Playgroud)

来自mkyong.com的信息。在这里,您可以找到有关如何将图像保存到数据库的完整示例。以及如何检索图像的示例。


注意:对于Hibernate 4.3+,您的代码在代码try块中略有变化。因为class ServiceRegistryBuilder被替换StandardServiceRegistryBuilder

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
Run Code Online (Sandbox Code Playgroud)