Skip to Main Content

Java Database Connectivity (JDBC)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

problem with BFile user type mapping

843859Nov 19 2008 — edited Nov 20 2014
Hallo, Hibernate forum is dead, so I try this..
I need use BFile like storage type for my files. I read all of posts in this forum about BFile. But I can not solve this exception:

Caused by: org.hibernate.MappingException: Could not determine type for: bfile, for columns: [org.hibernate.mapping.Column(file)]

my class:
@TypeDef(name = "bfile", typeClass = BFileType.class) 
abstract public class GeneralFile extends BaseWithId { 

    private String name; 
    private String description; 

    private byte[] file; 
    ... 

    @Type(type = "bfile") 
    byte[] getFile() { 
        return file; 
    } 
my user type:
import java.io.Serializable; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import oracle.jdbc.OracleConnection; 
import oracle.jdbc.OracleTypes; 
import oracle.sql.BFILE; 

import org.hibernate.HibernateException; 
import org.hibernate.usertype.UserType; 
import org.hibernate.util.EqualsHelper; 

public final class BFileType implements UserType { 
    private static final int BFILE_TYPE = OracleTypes.BFILE; 
    private static final Class RETURNED_CLASS = byte[].class; 

    public int[] sqlTypes() { 
        return new int[] { BFILE_TYPE }; 
    } 

    public Class returnedClass() { 
        return RETURNED_CLASS; 
    } 

    public boolean equals(Object x, Object y) throws HibernateException { 
        return EqualsHelper.equals(x, y); 
    } 

    public boolean isMutable() { 
        return false; 
    } 

    public Object assemble(Serializable cached, Object owner) throws HibernateException { 
        return cached; 
    } 

    public Object deepCopy(Object value) throws HibernateException { 
        return value; 
    } 

    public Serializable disassemble(Object value) throws HibernateException { 
        return (Serializable) value; 
    } 

    public int hashCode(Object x) throws HibernateException { 
        return x.hashCode(); 
    } 

    public Object nullSafeGet(ResultSet rs, String[] names, Object owner) 
            throws HibernateException, SQLException { 
        BFILE file = (BFILE) rs.getObject(names[0]); 

        if (file == null) { 
            return null; 
        } 

        return file.getBytes(); 
    } 

    public void nullSafeSet(PreparedStatement st, Object value, int index) 
            throws HibernateException, SQLException { 
        if (value == null) { 
            st.setObject(index, null); 
        } else { 
            BFILE file = new BFILE((OracleConnection) st.getConnection(), (byte[]) value); 
            file.setLocator("".getBytes()); 
            st.setObject(index, file); 
        } 
    } 

    public Object replace(Object original, Object target, Object owner) throws HibernateException { 
        return original; 
    } 
} 
what I am doing wrong?

configuration:
hibernate 3.2.5
Oracle Database 11g
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Dec 17 2008
Added on Nov 19 2008
0 comments
217 views