2013-12-16 3 views
0

2 열이 있습니다. 이름 : 이름, 성 검색 값이 search입니다. 예를 들어 fullname을 검색 할 수 있기를 바랍니다. john doe. (공간과 함께). 지금까지 나는 존이나 도우를 타이핑하여 이름이나 성으로 만 작업했습니다.최대 절전 값 (또는 그 일부)을 2 열로 비교

이 내가 전체 이름에 대해 뭘하려 :

Criterion fullname = Restrictions.and(Restrictions.like("name", search).ignoreCase(), 
       Restrictions.like("surname", search).ignoreCase()); 

전체 부분 :

Private List<Users> getSearch(String search) { 
      List<Users> users = new ArrayList<Users>(); 
      Session dbSession = HibernateUtil.getSessionFactory().getCurrentSession(); 
      try { 
       Transaction tx = dbSession.beginTransaction(); 
       Criteria cr = dbSession.createCriteria(Users.class); 
       Criterion name = Restrictions.or(Restrictions.like("name", search).ignoreCase(), 
       Restrictions.like("surname", search).ignoreCase()); 
       Criterion fullname = Restrictions.and(Restrictions.like("name", search).ignoreCase(), 
        Restrictions.like("surname", search).ignoreCase());   

       Disjunction disjunction = Restrictions.disjunction(); 
       disjunction.add(name); 
       disjunction.add(fullname); 
       cr.add(disjunction); 
       users = (List<Users>) cr.list(); 
       tx.commit(); 
      } catch (HibernateException he) { 
      } 
      return users; 
     } 
+0

전체 조건 코드를 공유해주십시오. –

+0

명확히하기 : 사용자가 "John D", "John", "Doe"를 입력 할 때 동일한 "John Doe"를 검색하고 찾을 수있게 하시겠습니까? 공백이 아닌 다른 것으로 이름 부분을 분리 할 수 ​​있습니까? – mabi

+0

이제는 존 또는 미상을 입력하여 사용자를 찾을 수 있습니다. 사용자가 존 도우를 입력하여 사용자를 찾을 수 있기를 바랍니다. 공백 만 있으면 안됩니다. – DaViDa

답변

1

음, 쉽게 수 없습니다. 다음 두 가지 옵션이 있습니다.

  1. 데이터베이스의 필드를 연결하고 검색하십시오. JPA/Hibernate를 사용하여 이것을 수행하는 방법을 잘 모르겠습니다. 가장 빠른 방법이지만 원시 SQL이 필요합니다.

  2. 데이터베이스의 모든 이름 필드를 선택하고 연결하고 java에서 일치 작업을 수행하십시오.

당신 는 (? 공백 기준) 및 입력 모든 부분에 대한 각 필드 검색은 입력을 분할 할 수있는 세 번째 옵션이있을 수 있습니다,하지만이 모든 종류의 문제로 당신을 가져옵니다 어떤 경우를 사용자가 "John Doe"를 입력했지만 "Doe, John"이 있습니까? 누군가 중간 이름을 사용하는 사람을 찾으려면 어떻게해야합니까? 누군가 성이 있습니까?

요약 : 데이터베이스에서 모든 이름 필드를 가져 와서 결합하고 String#contains()으로 문자열 목록을 검색하십시오.