2010-08-04 5 views
2

이것은 매우 간단 해 보이고 해결책을 찾지 못했다고 생각합니다. 이름이있는 PersonBean이라는 bean이있다. 이제 문자열을 가져 와서 해당 문자열을 가진 사람들을 대소 문자를 구별하지 않고 찾는 이름 찾기 메소드를 작성하려고합니다.EJB QL에서 대소 문자를 구별하지 않는 검색

    내가 검색은 대소 문자를 구분합니다 (위의 대소 문자를 구분)되고 싶어요
  1. 내가 찾을 수 없습니다 :이 2 문제가

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

    : 여기에 내 현재의 EJB QL입니다 EJB QL에서 lower() 또는 upper()과 같은 것입니다. 나는 그 행동을하기 위해 무엇을 할 수 있습니까? 업데이트 : J2EE 버전 1.4와 glassfish 버전 2.1을 사용하고 있습니다.

  2. 추한 문자열을 메서드에 전달해야합니다 (예 : findByString("%john%")). findByString("john") 같은 것을 전달할 수 있도록 EJB QL을 작성하는 방법이 있습니까?
+0

. 그래서 JPA로 태그를 지정하지 마십시오. –

+0

나는 그것을 추가하지 못했을 것입니다. – phunehehe

답변

1

는 EJB QL 2.1에 CONCAT 기능이있다, 그래서 나는 다음과 같은 작동해야한다고 생각?을 % ')))

편집 : QL의 문법은 정말 제한되는 LIKE 식, 리터럴 문자열과 입력 매개 변수를 허용하기 때문에은 위의 작동하지 않습니다. 이 같은 LOCATE 기능을 사용하여 동일한 효과를 실현하려 가능해야한다 :

이 질문에 JPA에 대해 아무것도 (JPA 3.0을 자바 EE 5에 도입하고 EJB 된)이 없다
WHERE LOCATE(p.name, ?1) <> 0 
+0

죄송합니다. 작동하지 않습니다. (구문 오류가 있습니다.) – phunehehe

+0

감사합니다. 사실 'WHERE LOCATE (? 1, p.name) <> 0입니다. '와 같은 XML 파일에서 사용되는 경우'ejb-jar.xml'과 같이'WHERE LOCATE (? 1, p.name) < > 0'이어야합니다 – phunehehe

2

EJB 2.x 엔티티 bean (JPA 및 EJB3 엔티티 bean에서 사용되는 JPQL과 혼동하지 말아야 함)에 사용되는 EJB-QL은 매우 제한적입니다. 어쨌든 EJB 2.1의 언어에는 some additions이라는 언어가 있습니다. 내 믿음에는 위/아래 기능이 없습니다.

실행중인 컨테이너가 무엇인지 모르겠지만 JBoss는 EJB-QL (JBossQL)에 대한 일부 확장을 수행했으며 UCASE 기능을 제공합니다. '

WHERE (p.name LIKE CONCAT ('% ', CONCAT (1 : 두 번째 질문에 대해서는

+0

정보를 주셔서 감사합니다.하지만 glassfish v2.1을 사용하고 있습니다. – phunehehe

관련 문제