J'ai rencontré le problème suivant, qui semble être un prettycommon. L'exception est Cannot update entity: [...] nested exception is java.sql.BatchUpdateException: ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column
. Il semble qu'Oracle n'aime pas lier les grandes valeurs (> 4000 caractères) aux paramètres après un LOB ou un CLOB. Est-ce que quelqu'un a résolu ce problème?Étrange erreur Oracle avec Hibernate et CLOB
Répondre
Ceci est: ORA-24816
** C'est une limitation, et que les variables de liaison LONG doivent venir en dernier dans une déclaration. **
source: http://www.odi.ch/weblog/posting.php?posting=496
Solution: En renommant les champs dans le modèle de mise en veille prolongée afin que la colonne de clob a un nom qui vient plus tard que la colonne VARCHAR2 lors de la commande par ordre alphabétique (I préfixés le champ clob dans la Java classe avec un 'z'), tout fonctionne bien car alors le paramètre clob vient après le paramètre varchar dans la construction de la compilation hibernate.
Nous avons rencontré le même problème avec Hibernate 3.2.1 et nous avons corrigé en insérant d'abord l'enregistrement sans CLOB puis en mettant à jour cet enregistrement avec les CLOB.
public class Employee{
@Lob
@Column
private String description;
//getters setters
}
String desc = emp.getDescription();
emp.setDescription(null);
session.save(entity);
session.flush();
session.evict(entity);
StringBuilder sb = new StringBuilder();
sb.append("update Employee set description:description");
Query updateQuery = session.createQuery(sb.toString());
updateQuery.setParameter("description", desc, Hibernate.STRING);
updateQuery.executeUpdate();
Si vous utilisez des annotations Hibernate, alors il n'y a aucun moyen de prédire l'ordre des colonnes dans l'instruction d'insertion. Cela a été corrigé dans Hibernate v4.1.8.
- 1. Hibernate + Oracle + Clob: Contenu des attributs se commutée
- 2. Stockage CLOB Oracle 11g
- 3. Java: fusion d'instance w/Oracle CLOB en utilisant Hibernate
- 4. Oracle AQ CLOB JmsTemplate
- 5. Hibernate avec HSQLDB et Oracle
- 6. passe Oracle CLOB depuis et vers Java
- 7. Erreur de distribution étrange avec Linq et Oracle
- 8. Hibernate cultures valeurs clob curieusement
- 9. Oracle clob sur dblink avec différents charset
- 10. Oracle mise à jour CLOB avec varchar
- 11. comportement étrange Hibernate findByCriteria
- 12. Erreur lors de l'utilisation de PropertyNotInList dans Grails + Oracle + CLOB
- 13. Insérer Oracle CLOB dans CodeIgniter
- 14. Oracle clob à String dans JSP
- 15. Oracle 10gR2 CLOB Type de données
- 16. Séquence Oracle avec Hibernate
- 17. Oracle Char type et Hibernate
- 18. Mise à jour de la colonne clob dans oracle avec la valeur CLOB
- 19. fonction Oracle exécution avec des données CLOB avec Spring JDBC
- 20. étrange erreur Oracle SQL « Identifiant non valide »
- 21. Oracle: Erreur lors de l'exécution requête
- 22. Tirer Oracle CLOB différent de VARCHAR2?
- 23. Performances Sybase TEXT vs Oracle CLOB
- 24. Question sur l'objet Clob dans Hibernate
- 25. VB6 Oracle Récupération Clob dans un tableau
- 26. Pourquoi Hibernate a-t-il choisi d'utiliser LONG sur CLOB?
- 27. RTRIM (champ CLOB) dans Oracle PL/SQL
- 28. unique table Oracle fusion constante avec CLOB en utilisant JDBC
- 29. BizTalk et DB2 CLOB
- 30. GeneratedValue avec oracle et hibernate ne fonctionne pas
Je trouve que les entités mappées XML je pouvais changer l'ordre des propriétés dans la config pour obtenir les CLOBs à la fin de l'instruction INSERT/UPDATE. Par exemple. ' ' –