6

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

4

1 回答 1

5

根据这个简单的教程

会话对象

会话用于获取与数据库的物理连接。Session 对象是轻量级的,设计为在每次需要与数据库交互时实例化。 持久对象通过 Session 对象进行保存和检索

会话对象不应长时间保持打开状态,因为它们通常不是线程安全的,应根据需要创建和销毁它们。

在 Hibernate 4.0+ 中,您可以SessionSessionFactory. 让我们为此任务编写一个方便的类。

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块内的代码略有变化。因为 classServiceRegistryBuilderStandardServiceRegistryBuilder.

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
于 2014-12-02T15:12:11.280 回答