Hibernate example of insert/select blob from database

In previous hibernate tutorials, we have learned about first level cache, second level cache and some various mapping examples etc. This is complete list of hibernate related tutorials. In this post, I am giving an example of inserting BLOB data into database using hibernate and getting this data from database, using hibernate entities.

In short, inserting and fetching BLOB data such as images requires two steps: define database column type as “BLOB” and have a field in entity of type “byte array”.

Lets take an example, in which, I am inserting “test.png” image from windows C drive to database (MySQL). Then I will read the image data again from database and store it to different location.

Hibernate entity

Please note, I have declared the data field as byte[].

@Table(name = "TBL_IMAGES")
public class ImageWrapper implements Serializable {
	private static final long serialVersionUID = 1L;

	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID", unique = true, nullable = false)
	private Integer id;
	@Column(name = "IMAGE_NAME", unique = false, nullable = false, length = 100)
	private String imageName;
	@Column(name = "DATA", unique = false, nullable = false, length = 100000)
	private byte[] data;
	//Getters and Setters

Inserting blob data into database

Let’s look at the code:

	Session session = HibernateUtil.getSessionFactory().openSession();
	File file = new File("C:\test.png");
	byte[] imageData = new byte[(int) file.length()];

	try {
		FileInputStream fileInputStream = new FileInputStream(file);
	} catch (Exception e) {

	ImageWrapper image = new ImageWrapper();

	session.save(image);	//Save the data

After executing above code, you can verify that a table into database is created if it’s not already there. And one BLOB column is created to hold the image data.

Hibernate blob example

Hibernate blob example

Reading the blob data from database

This is simple, and in fact you do not need to do anything extra. Above entity definition will work fine.

	Session session = HibernateUtil.getSessionFactory().openSession();
	ImageWrapper imgNew = (ImageWrapper)session.get(ImageWrapper.class, 1);
	byte[] bAvatar = imgNew.getData();

		FileOutputStream fos = new FileOutputStream("C:\temp\test.png"); 
	}catch(Exception e){


Hibernate configuration

For reference, This is the configuration I am using for this example:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
		<property name="hibernate.hbm2ddl.auto">create</property>
        <mapping class="hibernate.test.dto.ImageWrapper"></mapping>

Also below is the code for HibernateUtil.java


public class HibernateUtil {
	private static final SessionFactory sessionFactory = buildSessionFactory();
	private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new AnnotationConfiguration().configure(new File
            		("D:\Latest Setup\eclipse_juno_workspace\hibernate-test-project\hibernate.cgf.xml"))
        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() {

If still feeling trouble, download the sourcecode attached.

Happy Learning !!


I have 7 Years of rich experience in java technology. This has only increased my hunger to learn more. In this blog, i will be writing on different topics occasionally, and would love to engage in some meaningful serious discussions with you folks.

You may also like...

11 Responses

  1. akhila says:

    how to configure the hibernate.cfg.xml in sessionfactory. i am placed inside the src.
    it shows an error message

    ailed.org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
    Exception in thread “main” java.lang.ExceptionInInitializerError
    at com.sree.tribro.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
    at com.sree.tribro.HibernateUtil.(HibernateUtil.java:11)
    at com.sree.tribro.TestHibernate.main(TestHibernate.java:12)
    Caused by: org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2163)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2075)
    at com.sree.tribro.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
    … 2 more
    Caused by: org.dom4j.DocumentException: Error on line 2 of document : The processing instruction target matching “[xX][mM][lL]” is not allowed. Nested exception: The processing instruction target matching “[xX][mM][lL]” is not allowed.
    at org.dom4j.io.SAXReader.read(SAXReader.java:482)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)

  2. akhila says:

    Hai sir,
    How to upload .doc/.txt files using hibernate.I need urgent .
    plz help me.

  3. akhila says:

    After running this code,I got a nullpointer Exception.please help me sir.

    • Lokesh says:

      Give me the stacktrace

      • akhila says:

        sir, already i was given but it shows a error message

        java.io.FileNotFoundException: C:ody.jpg (The filename, directory name, or volume label syntax is incorrect)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.(Unknown Source)
        at com.sree.tribro.TestHibernate.main(TestHibernate.java:19)
        imagewrapp0_.id as id1_0_0_,
        imagewrapp0_.DATA as DATA2_0_0_,
        imagewrapp0_.IMAGE_NAME as IMAGE_NA3_0_0_
        TBL_IMAGES imagewrapp0_
        Exception in thread “main” java.lang.NullPointerException
        at com.sree.tribro.TestHibernate.main(TestHibernate.java:33)

        • Lokesh says:

          It’s java.io.FileNotFoundException. File you are trying to insert is not found. Make sure path is correct. In path, do not use “\”(backslash).. rather use “/” forward slash.

  4. Valerio says:

    for PDF instead?? what can i use instead of ImageWrapper?

  5. Nicolas says:

    What if..
    The file is bigger than the max Memory
    I mean, -Xmx512m and my file is 2Gig?

    • Lokesh Gupta says:

      BLOB fields should be used for storing small files e.g. resumes (not necessarily). Storing 2 GB data in one row is not a good idea to me. Use file system instead and store file name and path in database.
      Even after this somebody needs to store 2 GB in database, then file must be spilted into multiple parts and store into multiple rows. On retrieval retrieve them all, and join them back.

Note:- In comment box, please put your code inside [java] ... [/java] OR [xml] ... [/xml] tags otherwise it may not appear/post as intended.

Want to ask any question? Or suggest anything?