Hibernate > CLOB > Oracle :(
Je suis en train d'écrire un Oracle clob terrain d'une valeur de plus de 4000 caractères. Cette coutures pour être une question commune mais non des solutions semblent fonctionner. Alors je prie pour aider à partir d'ici.
Vers le bas et sale info:
L'Utilisation D'Oracle 9.2.0.8.0
Hibernate3 la mise en œuvre de pojo avec annotations
Tomcat 6.0.16
Oracle 10.2.pilotes x
C3P0 connction piscine fournisseur de
Dans mon persistence.xml j'ai:
<persistence-unit name="DWEB" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.password" value="###" />
<property name="hibernate.connection.username" value="###" />
<property name="hibernate.default_schema" value="schema" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
<property name="show_sql" value="true" />
<property name="format_sql" value="true" />
<property name="use_sql_comments" value="true" />
<property name="SetBigStringTryClob" value="true"/>
<property name="hibernate.jdbc.batch_size" value="0"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@server.ss.com:1521:DDD"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
</properties>
</persistence-unit>
Les getter et setter ressemble:
@Lob
@Column(name="COMMENT_DOC")
public String getDocument(){
return get("Document");
}
public void setDocument(String s){
put("Document",s);
}
L'exception que je reçois est:
SEVERE: Servlet.service() for servlet SW threw exception
java.sql.SQLException: Io exception: Software caused connection abort: socket write error
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)
at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3678)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1999)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1144)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2152)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2035)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2876)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:609)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2275)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2688)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:304)
at org.sw.website.actions.content.AddComment.performAction(AddComment.java:60)
...
Si j'ai besoin de donner plus d'infos moyens de demander. Tout fonctionne jusqu'à ce que le redoutable limite est dépassée.
l'exception ne semble pas liée à la CLOB. L'exception se produire lorsque vous retirez le CLOB?
Oui, et il ne se produit que si la taille est de plus de 4000
Ce matin, l'exception est différent. Il est le plus souvent rapportée java.sql.SQLException: Pas plus de données à lire à partir de socket à oracle.jdbc.dbaccess ...
Oui, et il ne se produit que si la taille est de plus de 4000
Ce matin, l'exception est différent. Il est le plus souvent rapportée java.sql.SQLException: Pas plus de données à lire à partir de socket à oracle.jdbc.dbaccess ...
OriginalL'auteur Mark | 2009-12-03
Vous devez vous connecter pour publier un commentaire.
Grâce à la non sequitor pour toute l'aide. J'ai ce travail et à la figure, je vais mettre toutes les pièces ici pour référence future. Indépendamment de toutes les réclamations au sujet de la mise à niveau les pilotes et tout devrait fonctionner, non de ce qui a fonctionné pour moi. À la fin, j'ai dû mettre en place une " org.mise en veille prolongée.usertype.UserType' j'ai nommé la même chose que tous les exemples sur le web StringClobType. A l'exception de quelques importations j'ai utilisé l'exemple de À l'aide de Clobs/Blobs avec Oracle et Hibernate. Pour autant que je suis concerné ignorer le "méfiez-vous" réclamation.
Il y avait un changement, j'ai dû faire pour obtenir fusionne de travail. Certaines de ces méthodes n'ont pas été mises en œuvre dans l'exemple de code. Eclipse fixe pour moi par stubbing. Cool, mais le remplacement de la méthode doit être effectivement mis en œuvre ou toutes les fusions va écraser les données avec une valeur null. Voici mon oeuvre:
Je ne vais pas dupliquer l'implémentation de la classe ici aller sur le lien ci-dessus pour le voir. J'ai utilisé le code dans la troisième case grise. Puis, au sommet de la classe pojo je voulais l'utiliser en ai-je ajouté, après les importations
Puis à utiliser la nouvelle UserType j'ai ajouté de l'annotation à mon getter:
Je n'ai pas besoin de l' @Lob annotation.
Dans mon persistence.xml la déclaration persistence-unit terminé la recherche comme:
La SetBigStringTryClob n'a jamais travaillé pour moi et n'était pas nécessaire pour cette mise en œuvre finale.
Ma leçon apprise, c'est à la fin, il est probablement préférable de les rejoindre pour se battre. Il serait de m'a sauvé trois jours.
Ouais vous devriez poster le code plutôt que de compter sur le lien, l'original a disparu.
OriginalL'auteur Mark
Je pense que votre problème est peut-être que vous utilisez Oracle 9i mais Hibernate dialecte est 10g. Assurez-vous que votre pilote,la version db et le dialecte sont tous en phase, car il y a un 9i dialecte ainsi
org.hibernate.dialect.Oracle9iDialect
Qu'en est les pilotes sont u encore à l'aide de pilotes pour 10g quand u utilisez 9i? Aussi pouvez-vous poster le sql généré?
Comment pouvez-vous dire quels sont les pilotes? Je suis l'aide de la dernière version de ojbc14.jar à partir de l'oracle site. La classe du pilote dans le persitence.xml est oracle.jdbc.le pilote.OracleDriver . Je vais creuser le sql en cours d'exécution et post-it.
C'est le sql généré par hibernate: insert into pweb60.EA_COMMENTS (APPROUVÉ, d'archiver, de CHEMIN, SUPPRIMÉ, COMMENT_DOC, FINI, MODERATED_BY, PARENT_COMMENT, TOPIC_ID, USER_ID, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Selon vous, vous êtes à l'aide de "Oracle 10.2.x pilotes" je ne suis pas sûr exactement ce que c'est
OriginalL'auteur non sequitor
Il devrait être:
Et non pas:
Et utilisez le bouton droit de dialecte pour votre base de données (
org.hibernate.dialect.Oracle9iDialect
).Assurez-vous également que vous utilisez la dernière Oracle 10g Release 2 mince pilote (10.2.0.4) ou plus tard.
OriginalL'auteur Pascal Thivent
Nous avons eu un problème similaire dans le passé, avec de LONGUES colonnes au lieu de CLOBs. Le problème était le pilote JDBC, celui que nous utilisons maintenant et fonctionne très bien est le texte d'alt http://img143.imageshack.us/img143/4263/20091204172213.png
OriginalL'auteur Lluis Martinez