2011-04-17 3 views
3

j'ai deux tablesEn veille prolongée Comment ne pas utiliser la clause

emplois et la production

table de production a champ jobid qui fait référence jobid de la table d'emplois.

En veille prolongée Comment ne pas utiliser la clause

pour obtenir requête suivante sql

SELECT * FROM emplois où JOB_ID pas (sélectionnez job_id de la production);

+1

salut j'ai reçu la réponse c'est très simple Critère criteria = session.createCriteria (BwJobs.class); DetachedCriteria detachedcriteria = DetachedCriteria.forClass (BwProduction.class); detachedcriteria.setProjection (Property.forName ("jobId")); criteria.add (Property.forName ("jobId"). NotIn (critères détachés)); // Requête de requête = session.createQuery ("from BwJobs"); jobsList = criteria.list(); –

Répondre

1

Vous pouvez utiliser HQL:

List<Job> jobs = session.createQuery(
     "from Job where id not in (select jobId from Production)" 
    ).list(); 
0

Je pense que le mot-clé not exist est un bon choix. Supposons que j'ai une table appelée "girafe", avec id comme clé primaire, et une autre table appelée "engineer" avec une colonne appelée "giraffe" qui se réfère à la table "giraffe" comme clé étrangère, puis la HQL suivante la requête a fonctionné pour moi:

from Giraffe giraffe where not exists (from Engineer as engineer where engineer.giraffe = giraffe.id) 
Questions connexes