Il est bien connu qu'Oracle traite les chaînes vides comme nulles.Oracle convertit la chaîne vide en null mais JPA ne met pas à jour le cache d'entité en conséquence
Cependant, j'ai un problème à cause de ce comportement dû à la mise en cache de JPA.
D'abord je persiste en utilisant JPA (Toplink Essentials) une entité, qui a une chaîne vide en tant qu'un seul champ. Oracle convertit cette valeur en null lorsqu'elle la stocke. Cependant, lorsque je récupère l'entité, JPA semble la renvoyer du cache, où ce champ est toujours une chaîne vide. JPA ne semble pas savoir que ce qui était stocké dans la base de données était en réalité une valeur nulle, et cette incohérence cause des problèmes.
Existe-t-il un moyen de résoudre ce problème sur le niveau de configuration du JPA ou du serveur d'applications (Oracle AS)? Ce quelque chose que je ne voudrais pas corriger au niveau de l'application (mais le fera si c'est nécessaire).
En fait, ces valeurs sont stockées comme nulles dans la base de données. – tputkonen
okay ... avez-vous vérifié si le résultat est DBNull? puisque java fait une différence entre null et DBNull – Gambrinus
Vous ne savez pas ce que vous voulez dire, mais d'abord je persiste une entité avec le champ foo (chaîne vide). Oracle stocke cela comme nul. Ensuite, je teste si foo contient une valeur nulle, sinon, essayez de le stocker dans un autre champ non nullable => exception. Je souhaite que JPA annule foo de la même façon qu'il stocke des IDs quand il persiste. – tputkonen