Save blob to DB using hibernate
- by Link123
Hey!
I tried save file to MySQL using blob with hibernate3. But I always have
java.lang.UnsupportedOperationException: Blob may not be manipulated from creating session
org.hibernate.lob.BlobImpl.excep(BlobImpl.java:127)
Here some code.
package com.uni.domain;
public class File extends Identifier {
private byte[] data;
private String contentType;
public byte[] getData() {
return data;
}
public File() {}
public void setData(byte[] photo) {
this.data = photo;
}
public boolean isNew() {
return true;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
}
package com.uni.domain;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.sql.*;
import java.util.Arrays;
public class PhotoType implements UserType {
public int[] sqlTypes() {
return new int[]{Types.BLOB};
}
public Class returnedClass() {
return byte[].class;
}
public boolean equals(Object o, Object o1) throws HibernateException {
return Arrays.equals((byte[]) o, (byte[]) o1);
}
public int hashCode(Object o) throws HibernateException {
return o.hashCode();
}
public Object nullSafeGet(ResultSet resultSet, String[] strings, Object o) throws HibernateException, SQLException {
Blob blob = resultSet.getBlob(strings[0]);
return blob.getBytes(1, (int) blob.length());
}
public void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException {
st.setBlob(index, Hibernate.createBlob((byte[]) value));
}
public Object deepCopy(Object value) {
if (value == null) return null;
byte[] bytes = (byte[]) value;
byte[] result = new byte[bytes.length];
System.arraycopy(bytes, 0, result, 0, bytes.length);
return result;
}
public boolean isMutable() {
return true;
}
public Serializable disassemble(Object o) throws HibernateException {
return null; .
}
public Object assemble(Serializable serializable, Object o) throws HibernateException {
return null; .
}
public Object replace(Object o, Object o1, Object o2) throws HibernateException {
return null; .
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.uni.domain">
<class name="com.uni.domain.File">
<id name="id">
<generator class="native"/>
</id>
<property name="data" type="com.uni.domain.FleType"/>
<property name="contentType"/>
</class>
</hibernate-mapping>
Help me please. Where I’m wrong?