Règles de manipulation des types de données dans une requête EJB

Lors de l'utilisation d'une requête EJB pour gérer des types de données, certaines règles doivent être respectées.

Vous pouvez utiliser une zone CMP de n'importe quel type dans une clause SELECT. Vous devez toutefois uniquement utiliser des zones des types suivants dans les conditions de recherche et dans les opérations de regroupement et de tri :

Si TOUTES les conditions suivantes sont remplies :
  • une zone CMP de l'un des types de base répertoriés précédemment est mappée vers une colonne SQL à l'aide d'un convertisseur ;
  • la zone CMP figure avant un prédicat de base ;
  • après le prédicat se trouve un littéral ou un paramètre d'entrée ;
alors la méthode toData() du convertisseur est utilisée pour calculer la valeur de recherche SQL.

Par exemple, si un convertisseur mappe l'entier 10 vers la valeur de chaîne "Ten", la requête EJB suivante :

e.cmp = 10

est convertie dans la requête SQL suivante :

column = 'Ten'

Si vous incluez un prédicat plus compliqué, comme dans l'exemple suivant :

e.cmp * 10 >  e.salary

dans une requête de sélection ou de recherche, vous recevez le message d'erreur Cannot push down query (impossible de transmettre la requête). Utilisez le service de requête EJB dynamique pour ce type de requêtes multifonction ; la phase d'exécution de la requête dynamique traite le prédicat dans le serveur d'applications.

En règle générale, les convertisseurs conservent l'égalité, l'ordre de classement et les valeurs NULL. Si un convertisseur ne répond pas à ces exigences, évitez de l'utiliser pour les opérations de comparaison des zones CMP.

Un type d'utilisateur ne peut pas être utilisé dans une opération ou une expression de comparaison. Vous pouvez toutefois utiliser des zones secondaires du type d'utilisateur dans une expression de chemin d'accès. Prenons, par exemple, la zone addr CMP avec le type com.exam.Address, ainsi que les zones secondaires street, city et state. La syntaxe suivante pour une requête sur cette zone CMP n'est pas valide :

e.addr =  ?1

Toutefois, une requête désignant l'une des zones secondaires est valide :

e.addr.street = ?1

Une zone CMP ne peut pas être mappée vers une colonne SQL à l'aide de la sérialisation Java. L'utilisation de la zone CMP dans des prédicats ou des expressions pour les requêtes de déploiement se traduit généralement par le message d'erreur Cannot push down query. La phase d'exécution de la requête dynamique traite l'expression en lisant et en désérialisant toutes les instances du type d'utilisateur sur le serveur d'applications.

Toutefois, ce processus coûteux nuit aux performances. Vous pouvez préserver les performances en utilisant un composeur dans une requête EJB de déploiement. Dans l'exemple précédent, si vous souhaitez mapper la zone addr vers un type binaire, utilisez un composeur pour mapper chaque zone secondaire vers une colonne binaire de la base de données.


Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cque_datatyperules
Nom du fichier : cque_datatyperules.html