1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

EJB 3 - Les Entreprise Java Bean version 3 (JavaBeans)

3.4.La clause FROM

La clause FROM permet de définir le domaine de la requête. 
Voici la description de cette clause :
from_clause ::=
FROM identification_variable_declaration
{, {identification_variable_declaration | collection_member_declaration}}*

identification_variable_declaration ::= range_variable_declaration { join | fetch_join }*

range_variable_declaration ::= abstract_schema_name [AS] identification_variable

join ::= join_spec association_path_expression [AS] identification_variable

fetch_join ::= join_spec FETCH association_path_expression

association_path_expression ::=
collection_valued_path_expression | single_valued_association_path_expression

join_spec::= [ LEFT [OUTER] | INNER ] JOIN

collection_member_declaration ::=
IN (collection_valued_path_expression) [AS] identification_variable

3.4.1.Les identifiants

Un identifiant est une séquence de caractère (longueur infinie). Cependant vous devez faire attention de ne pas utiliser un identifiant réservé.
Voici la liste de ceux-la :
SELECT, FROM, WHERE, UPDATE, DELETE,
JOIN, OUTER, INNER, LEFT, GROUP, BY, HAVING, FETCH, DISTINCT, OBJECT, NULL, TRUE,
FALSE, NOT, AND, OR, BETWEEN, LIKE, IN, AS, UNKNOWN[13], EMPTY, MEMBER, OF, IS, AVG,
MAX, MIN, SUM, COUNT, ORDER, BY, ASC, DESC, MOD, UPPER, LOWER, TRIM, POSITION,
CHARACTER_LENGTH, CHAR_LENGTH, BIT_LENGTH, CURRENT_TIME, CURRENT_DATE,
CURRENT_TIMESTAMP, NEW, EXISTS, ALL, ANY, SOME.

Nous retrouvons, parmi les identifiants, ceux utilises pour les variables. Ils doivent être déclarés dans la clause FROM. Ces identifiants sont « case sensitive ».
Ces variables permettent de représenter une valeur d’un type d’une expression.
SELECT DISTINCT o
FROM Order o JOIN o.lineItems l JOIN l.product p
WHERE p.productType = ‘office_supplies’

Dans l’exemple ci-dessus :
  • o.lineItems l indique que l est évalué comme étant n’importe quel LineItem directement lié à un objet Order.
  • p représente un « Product »
  • o représente un « Order »

3.4.2.Jointures (JOINS)

Vous pouvez spécifier explicitement une jointure dans votre clause FROM.
Il existe différentes jointures :
  • Inner Join
  • Outer Join
  • Fetch Join

Bien que l’on puisse utiliser d’autres manières de relier deux entités (ou plus) via l’intruction « IN » par exemple, le concept de jointure est toujours présent et nous allons détailler son fonctionnement.
        1. Inner Join

La syntaxe d’une jointure interne est :
[ INNER ] JOIN association_path_expression [AS] identification_variable

Voici un exemple concret d’utilisation de ce type de jointure :
SELECT c FROM Customer c JOIN c.orders o WHERE c.status = 1
Cette requête joint les commandes (orders) et les clients (Customer).
Remarque : le mot clé INNER est optionnel. Il est principalement utilisé ici pour préciser le type de jointure au développeur.
La requête précédente équivaut à :
SELECT OBJECT(c) FROM Customer c, IN(c.orders) o WHERE c.status = 1
L’utilisation du « IN » utilise donc une jointure interne implicite.

        1. Outer Join

Ce type de jointure permet de récupérer un ensemble d’entité pour lesquels des valeurs validant la condition de jointure peuvent être absent.

Voici la syntaxe d’une jointure externe :
LEFT [OUTER] JOIN association_path_expression [AS] identification_variable

Voici un exemple d’utilisation de ce type de jointure :
SELECT c FROM Customer c LEFT JOIN c.orders o WHERE c.status = 1
Remarque : le mot clé OUTER est optionnel.
        1. Fetch Join

Ce type de jointure est spécial dans le sens où il s’applique aussi bien à une jointure interne qu’à une jointure externe.
L’utilisation d’une FETCH JOIN permet d’établir le « fetching » d’une association en tant que requête indépendante. Ce type de jointure est spécifié par rapport à une entité et ses entités relationnelles.

Voici la syntaxe de ce type de jointure :
fetch_join ::= [ LEFT [OUTER] | INNER ] JOIN FETCH association_path_expression

Voici un exemple d’utilisation de cette requête :
SELECT DISTINCT c
FROM Customer c LEFT JOIN FETCH c.orders
WHERE c.address.state = ’CA’

La requête précédente retourne un ensemble de client (Customer). De plus les commandes (orders) associées aux clients sont également retrouvées même si elles ne sont pas explicitées définies dans la clause FROM.
Les champs persistants des commandes sont donc également initialisés.

3.4.3.Collections

Un identificateur de variable déclaré comme un « membre de collection ». Cet identifiant est déclaré en utilisant un spécifique opérateur : « IN ». Le paramètre à donner à cet opérateur est l’objet collection à utiliser.
Voici la declaration théorique :
collection_member_declaration ::=
IN (collection_valued_path_expression) [AS] identification_variable

Voici un exemple de requite utilisant l’opérateur IN :
SELECT DISTINCT o
FROM Order o, IN(o.lineItems) l
WHERE l.product.productType = ‘office_supplies’

Cette requête correspond à :
SELECT DISTINCT o
FROM Order o JOIN o.lineItems l JOIN l.product p
WHERE p.productType = ‘office_supplies’

Dans cet exemple, lineItems est le nom du champ relationnel qui représente une collection d’instance d’objet de type : LineItem.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Essentiels de cours Java
JavaEJB 3 - Les Entreprise Java Bean version 3 (JavaBeans)
Cet essentiel est la suite de « Entreprise JavaBean 2.1 ». Cependant, nous allons étudier les nouvelles spécifications 3.0 qui simplifient énormément le développement par rapport aux EJB 2.6/20/06
JavaSWT - Créer des interfaces graphiques performantes
SWT (Standard Widget Toolkit) est une librairie graphique qui vous permet de réaliser des applications graphiques Java beaucoup plus avancées et surtout plus rapide à l’exécution.1/29/06
JavaStruts - Un framework MVC pour vos applications J2EE
Struts est un framework open-source qui vous permet de gagner du temps, mais qui permet aussi de voir des applications complexes comme une suite de composants de base : Vues, Actions, Modèles. Vous gagnez ainsi en évolutivité et en lisibilité du code.1/13/06
JavaHibernate - Persistance objet - relationnel
Cet essentiel explique comment utiliser Hibernate afin de gérer la persistance objet relationnel au sein de vos applications Java.12/14/05
JavaIntroduction J2EE - Applications d'entreprise
Cours d'introduction aux diverses technologies et outils que l'on peut rencontrer dans le monde du Java orienté entreprise J2EE12/14/05
JavaEJB 2 - Les Entreprise Java Bean (JavaBeans)
L'objectif avec EJB2 (Entreprise JavaBeans) est d'introduire les concepts de l’Ingénierie Logicielle Basée sur les Composants.12/14/05
JavaDesign Patern - Améliorez l'architecture de vos programmes
Afin de répondre a des situation récurrentes en programmation, les "design partern" apportent une solution type à beaucoup de contraintes liées à la programmation objet.12/14/05
JavaArchitecture J2EE - Comment organiser son application J2EE
Ce cours explique comment créer un code modulable, lisible et évolutif afin d'assurer la pérénité de son application.12/14/05
JavaLes web-services - Publication de services
Le développement tend vers les technologies du Web. Il est difficile de faire la distinction entre les différents logiciels qui sont de plus en plus intégrés au Web. Les Web Services rentrent dans l’optique de différencier bien précisément les couches.12/14/05
JavaAnt - L'automatisation des tâches du programmeur
Ecrire des scripts afin d'exécuter les tâches récurrentes10/31/05
JavaIntroduction au langage Java - Présentation & historique
Présentation des origines du langage, ainsi que se buts premiers8/11/05
JavaLa Syntaxe Java - Bases & nomenclatures
Bases de la syntaxe du langage Java8/11/05
JavaLes Classes - Concepts & héritage
Base du développement objet en Java grâce aux classes8/11/05
JavaLes Exceptions - Gestion d'erreurs
Gérer les erreurs liés à la programmation8/11/05

Articles
Eclipse Europa : le successeur de Callisto
Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3) faisant ainsi passer le nombre de projets embarqués de 10 à 21. Que ceux qui sont réticents aux « distributions » d'Eclipse se rassu12/21/07
JavaCruiseControl : l’outil d’intégration continue à avoir dans sa boite à outils
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou .Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans7/2/07
JavaEJB3 - Des concepts à l'écriture du code - Editions DUNOD
Consulter le résumé du premier ouvrage du laboratoire Sun de SUPINFO : EJB3 - Des concepts à l'écriture du code. Guide du développeur, éditions DUNOD.5/27/07
JavaPassage de certification Java Web (SCWCD)
Passer une certification est toujours un moment important car cela permet de mieux faire reconnaître ses compétences face à un recruteur ou un employeur.5/12/07
JavaGoogle Web Toolkit
Google Web Toolkit est un framework java pour générer du javascript et des requêtes Ajax à partir d’un code java. Voilà comment il fonctionne.5/10/07
JavaJ2ME Vs SDE
Demain, les terminaux « légers » seront plus nombreux que les ordinateurs personnels, ce qui entraîne une bataille sur le choix d’une plateforme identique à tous ces terminaux… Aujourd’hui nous retrouvons le J2ME ainsi que le SDE qui s’offrent une rude b4/22/07

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright 2000-2006 SUPINFO Paris, Paris Academy of Computer Science
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée