Vodo-Siosk Baas Vodo-Siosk Baas - 6 months ago 56
SQL Question

Hibernate 4.1.2.FINAL Disabling contextual LOB creation as createClob() method threw error , Blob field

I want to create a BLOB field with hibernate/postgresql 9.1.1

Why do I see this message in the logs:

INFO [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-5)
HHH000424: Disabling contextual LOB creation as createClob() method threw error :
java.lang.reflect.InvocationTargetException


I know this is not an error.

Hibernate 4.1 documentation:

"@Lob indicates that the property should be persisted in a Blob or a Clob depending
on the property type: java.sql.Clob, Character[], char[] and java.lang.String will be
persisted in a Clob. java.sql.Blob, Byte[], byte[] and Serializable type will be persisted in a Blob."


I declare my field like this:

@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@Basic(fetch=javax.persistence.FetchType.LAZY)
@Column(name = "`ACTA_CERTIFICACION`")
public byte[] getActacertificacion() {
return actacertificacion;
}
/**
* @param actacertificacion
* @uml.property name="actacertificacion"
*/
public void setActacertificacion(byte[] actacertificacion) {
this.actacertificacion = actacertificacion;
}


But in the database its create like a text field:

"ACTA_INCREMENTOSUSTITUCION" text


What can I do?, I want to create a byte field or something similar.

Answer

Since the you are using text in database, you should be using CLOB type in the POJO class. If you want to map this, just add a property in your POJO as below,

@Column(name="ACTA_INCREMENTOSUSTITUCION")
@Clob
private Clob tect;

Now, as per your requirement you can convert this Clob to a byte[] as told here.