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

时间:2013-08-05 05:44:26

标签: java hibernate

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

1 个答案:

答案 0 :(得分:4)

根据this easy tutorial

  

会话对象

     

会话用于获取与数据库的物理连接。 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());