Domanda

Questo sembra davvero semplice e io non posso credere che non ho trovato una soluzione per me.Ho un bean denominato PersonBean, che ha un nome.Ora voglio scrivere un metodo di ricerca che prende una stringa e la ricerca persone con la stringa in loro nome, caso maiuscole e minuscole).Ecco la mia attuale EJB-QL:

SELECT OBJECT(p)
FROM Person p
WHERE (p.name LIKE ?1)

Ho 2 problemi con questa:

  1. Voglio la ricerca case-insensitive (di cui sopra è case-sensitive) e non riesco a trovare qualcosa di simile lower() o upper() in EJB-QL.Cosa posso fare per avere quel comportamento? AGGIORNAMENTO:Sto usando J2EE versione 1.4 e glassfish versione 2.1, se quello che conta.
  2. Devo passare un brutto stringa con il metodo che ho.e findByString("%john%").C'è un modo per scrivere il EJB-QL modo che io possa passare qualcosa di simile findByString("john")?
È stato utile?

Soluzione

Per quanto riguarda la tua seconda domanda, c'è un CONCAT funzione in EJB-QL 2.1, quindi penso che dovrebbe funzionare:

DOVE (p.nome COME CONCAT('%', CONCAT(?1, '%')))

Edit: Non perché il ql di grammatica consente solo le stringhe letterali e i parametri di input in un LIKE l'espressione, che è davvero limitante.Dovrebbe essere possibile ottenere lo stesso effetto utilizzando il LOCATE funzione come questa:

WHERE LOCATE(p.name, ?1) <> 0

Altri suggerimenti

EJB-QL utilizzato in EJB 2.x gli entity bean (da non confondere con JPQL utilizzato in EJB3, JPA e gli entity bean) è estremamente limitata.Ci sono stati dei castelli alcune aggiunte per la lingua in EJB 2.1, che sono le mie convinzioni non superiore/inferiore di funzioni.

Non so cosa contenitore in esecuzione, ma JBoss ha fatto alcune estensioni per EJB-QL (chiamato JBossQL) e dispone di un UCASE funzione.

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