Domanda

Ho il seguente costrutto in EJB-QL diversi EJB 2.1 metodi di ricerca:

SELECT distinct OBJECT(rd) FROM RequestDetail rd, DetailResponse dr 
      WHERE dr.updateReqResponseParentID is not null 
      and dr.updateReqResponseParentID = ?1 
      and rd.requestDetailID = dr.requestDetailID
      and rd.deleted is null and dr.deleted is null

bandiere ispezione EJB-QL di IDEA l'uso della FROM RequestDetail rd, DetailResponse dr due oggetti con un controllo che dice: Several ranged variable declarations are not supported, use collection member declarations instead (e.g. IN(o.lineItems))

Le query stesse funzionare bene (come in cambio i risultati attesi) su JBoss 4.2. È l'idea tutto bagnato qui, o c'è un problema di validità con la query? E qual è la sintassi alternativa preferita effettivo per una query?

Edit: Grazie per l'aiuto di tutti coloro che hanno risposto, in particolare Romain. Ho segnalato questo come un problema a JetBrains.

È stato utile?

Soluzione

La query è bene - Sembra un problema IDEA ispezione Codice
. Non riesco a trovare eventuali bug registrati contro di essa in quanto tale.

Si potrebbe desiderare di chiedere il loro sostegno se avete la versione a pagamento.

Ho trovato un problema minore, nelle specifiche per EJB 2.1 (e tutti gli altri del resto) si dice di utilizzare lettere maiuscole per NULL.

11.2.6.10 Null confronto espressioni
La sintassi per l'utilizzo dell'operatore di confronto IS NULL in un'espressione condizionale è la seguente: {Single_valued_path_expression | nome_parametro} IS [NOT] NULL Un test di espressione di confronto nullo se il valore valore singolo espressione di percorso o parametro di ingresso è nullo.

SELECT distinct OBJECT(rd) FROM RequestDetail rd, DetailResponse dr 
      WHERE dr.updateReqResponseParentID IS NOT NULL 
      and dr.updateReqResponseParentID = ?1 
      and rd.requestDetailID = dr.requestDetailID
      and rd.deleted IS NULL and dr.deleted IS NULL

Ecco una sezione dal EJB 2.1 specifica che soddisfa le vostre domande ...

11.2.5.3 Dichiarazioni variabile di intervallo La sintassi EJB QL per dichiarare una variabile di identificazione come variabile intervallo è simile a quello di SQL; opzionalmente, si utilizza la parola chiave AS.

range_variable_declaration :: = abstract_schema_name [AS] identificatore oggetti o valori che sono legati a un entity bean sono in genere ottenuti dalla navigazione utilizzando espressioni di percorso. Tuttavia, la navigazione non raggiunge tutti gli oggetti. dichiarazioni di variabili Gamma consentono Bean Fornitore per designare una “radice” per gli oggetti che possono non essere raggiungibili dalla navigazione. Se il provider Bean vuole selezionare i valori confrontando più istanze di un tipo astratto schema entità di fagioli, più di una variabile di identificazione che vanno oltre il tipo di schema astratto è necessaria nella clausola FROM.

I seguenti finder metodo query restituisce gli ordini la cui quantità è maggiore della quantità di ordine per John Smith. Questo esempio illustra l'uso di due variabili di identificazione diversi nella clausola FROM, sia del tipo di schema astratto Ordine. La clausola SELECT di questa query determina che sia gli ordini con quantità più grande di John Smith che vengono restituiti.

SELECT DISTINCT OBJECT(o1)
FROM Order o1, Order o2
WHERE o1.quantity > o2.quantity AND
o2.customer.lastname = ‘Smith’ AND
o2.customer.firstname= ‘John’

Altri suggerimenti

Supponendo detailResponse è il nome di un'associazione campo il cui valore è una raccolta di istanze di DetailResponse, è possibile questo per la navigazione attraverso i campi di associazione:

  SELECT distinct OBJECT(rd) FROM RequestDetail rd IN (rd.detailResponse) dr WHERE
  dr.updateReqResponseParentID is not null and dr.updateReqResponseParentID = ?1 
  and rd.deleted id null and dr.deleted is null

vorrei confrontare le query contro una risorsa ufficiale come BNF Grammatica di EJB QL per J2EE 1.3 (dal momento che lei ha citato EJB2.1)

Per una più recente specifica per JEE5 completa Query Language Sintassi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top