Hi! I really need help...
I'm using hibernate 2.1.2
 
I´m trying to insert o clob field into Oracle... I did the example located at page http://www.hibernate.org/56.html. What is wrong??? How can I insert o clob into Oracle?
The error that I have received for sizes bigger then 4000 caracteres is:
 
net.sf.hibernate.JDBCException: could not update: [com.dhc.doc.hibernate.FileAttachment#42]
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:706)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at com.dhc.doc.logic.FileAttachmentLogic.addFileAttachment(FileAttachmentLogic.java:51)
at com.dhc.doc.actions.FileUploadAction.execute(FileUploadAction.java:44)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)

Caused by: java.sql.SQLException: operation not allowed: streams type cannot be used in batching
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:2781)
at net.sf.hibernate.impl.BatchingBatcher.addToBatch(BatchingBatcher.java:30)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:688)

- My source code is:

:: Teste.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping>

<!--
Created by Middlegen Hibernate plugin

http://boss.bekk.no/boss/middlegen/
http://hibernate.sourceforge.net/
-->

<class
name="net.wasys.crea.model.Teste"
table="TESTE"
>
<id
name="id"
type="long"
column="ID"
>
<generator class="assigned" />
</id>

<property
name="texto"
type="clob"
column="TEXTO"
not-null="true"
/>

</class>
</hibernate-mapping>

------------------------------------------------

:: Teste.java

import java.io.Serializable;
import java.sql.Clob;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/** @author Hibernate CodeGenerator */
public class Teste implements Serializable {

/** identifier field */
private Long id;

/** persistent field */
private Clob texto;

.
.
.

------------------------------------------------

:: Teste4000.java (My test case)

public class Teste4000
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new FileReader("C://workspaces/crea/Crea/src/net/wasys/crea/test/a.txt"));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null)
{
sb.append(line);
}

System.out.println(sb.toString().length());

Teste teste = new Teste();
Configuration c = new Configuration();
c.configure(new File("hibernateTeste.cfg.xml"));
Session session = c.buildSessionFactory().openSession();
Transaction tx;

tx = session.beginTransaction();

teste.setId(new Long(11));
teste.setTexto(Hibernate.createClob(sb.toString()));

session.save(teste);
session.flush();
session.refresh(teste, LockMode.UPGRADE);

oracle.sql.CLOB clob = (oracle.sql.CLOB) teste.getTexto();

java.io.Writer pw = clob.getCharacterOutputStream();
pw.write(1);
pw.flush();
pw.close();
tx.commit();
session.close();

Thanks!

Reply via email to