2011-03-01 2 views
5

나는 여전히 최대 절전 모드에 익숙하지 않으며이를 수행하는 방법을 찾지 못하고있다. 아마도 잘못된 용어를 사용하여 검색하고있을 것이다. 내 UI에서 사용자가 제공 한 값을 전달하고 있습니다. 아래 예제에서는 변수 testvalue입니다. 그것은 검색을하기위한 것입니다 그래서 만약 사용자가 무엇을 입력하면 엔트리에 포함되어 있습니다 e.filenametxt 그 행을 일치로 반환하고 싶습니다.Java Hibernate/Spring, 부분 일치 쿼리 수행 ("contains")?

예를 들어, testvalue = "file1"를 들어, 나는 어떤 조언을 감사 e.filenametxt = "file1/someotherinfo/"

String SQL_QUERY = "from EdrmTest e where e.filenametxt is :foreignkeytest "; 
Query query = session.createQuery(SQL_QUERY); 
query.setParameter("foreignkeytest", testvalue); 

행을 찾을 수 있도록하려는 것이다.

+0

답변을 보완하기 위해 커버 아래에 lucene을 사용하는 최대 절전 모드 검색이라는 것이 있습니다. 동일한 문제를 해결하지만 더 강력하고 확장 가능합니다. – Federico

답변

7
String SQL_QUERY = "from EdrmTest e where e.filenametxt LIKE :foreignkeytest "; 
Query query = session.createQuery(SQL_QUERY); 
query.setParameter("foreignkeytest", "%" + testvalue + "%");\ 

시도해보십시오. 와일드 카드는 (어떤 이유로) 변수에 있어야합니다.

+0

+1 "%"가 매개 변수에 있어야한다는 것을 지적 해 주셔서 감사합니다.이 설명서는 내가 읽은 문서 중 어느 것도 명확하지 않으며 작동하지 못했습니다. –

6

the Criteria API을 사용하여 이러한 유형의 절을 프로그래밍 방식으로 설정할 수도 있습니다. 동적 로직을 추가해야하는 경우 (조건에 따라 특정 절 포함) HQL/String 기반 쿼리와 달리이 API를 사용하여 쿼리를 처리하는 것이 훨씬 더 좋을 수 있습니다.

Criteria crit = session.createCriteria(EdrmTest.class); //the persistent class goes here 
crit.add(Restrictions.like("filenametxt", testvalue + "%")); 
//execute the query: 
List<EdrmTest> results = (List<EdrmTest>) crit.list(); 
+0

텍스트가 적고 프로그래밍 방식이면서도 효과가 있지만 확실히 작동합니다. – Zoidberg

+0

정보, 감사합니다. – Rick

+1

대소 문자를 구별하지 않으려면 어디서나 일치 시키려면이 게시물을 참조하십시오. http://stackoverflow.com/questions/120588/case-insensitive-search-using-hibernate –