2013-06-14 37 views
21

Các _ (gạch dưới) được đưa ra trong truy vấn SQL không được tôn trọng.Làm thế nào để thoát khỏi gạch dưới trong truy vấn chuỗi trong hibernate và SQL?

Ví dụ:

SELECT * FROM employee WHERE NAME LIKE '%k_p%'; 

này phù hợp và mang lại nhiều hàng ngoài hàng có chứa k_p

Ai đó có thể xin vui lòng giúp đỡ về cách đạt được điều này trong SQL và cũng trong Hibernate? Cảm ơn.

+0

Bạn có thể chỉ định một ký tự [ESCAPE] (http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like). Ví dụ LIKE '% k | _p%' ESCAPE '|' . – wisefish

Trả lời

48

Bạn đã cố gắng thoát nó:

SELECT * FROM employee WHERE NAME LIKE '%k\_p%'; 

\_ thay vì chỉ _.

+0

+1 Đơn giản và dễ hiểu –

0

Trong giải pháp MySQL: select * from users where id like '%k_p%';

In Hibernate 

Dưới đây là giải pháp:

List<UserDTO> userDTOList = signUpBusiness.getUserDTODetails("k", "p"); 

Gọi phương pháp này

public List<UserDTO> getUserDTODetails(String firstMatch, String secondMatch) { 
    List<UserDTO> userDTOList = new ArrayList<UserDTO>(); 
    Session session = null; 
    try { 
     session = SessionFactoryFpf.getCurrentSession(); 
     Criteria criteria = session.createCriteria(User.class); 
     //MatchMode matchMode = MatchMode.ANYWHERE; 
     //criteria.add(Restrictions.like("id", firstMatch, matchMode)); 
     criteria.add(Restrictions.like("id", "%"+firstMatch+"_"+secondMatch+"%")); 
     List<User> userList = criteria.list(); 
     if (userList.size() > 0) { 
      for (User user : userList) { 
       UserDTO userDTO = new UserDTO(); 
       userDTO.setId(user.getId()); 
       userDTO.setDob(user.getDob()); 
       userDTO.setFullName(user.getFullName()); 
       userDTO.setGender(user.getGender()); 
       userDTO.setEmail(user.getEmail()); 
       userDTOList.add(userDTO); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     LOG.error("Type of exception occured in getUserDTODetails() is --> "+e); 
    } finally { 
     SessionFactoryFpf.closeSession(session); 
    } 
    return userDTOList; 
} 

Một cách khác chuyển đổi nhận xét trong phương pháp trên:

MatchMode matchMode = MatchMode.ANYWHERE; 
criteria.add(Restrictions.like("id", firstMatch, matchMode)); 
//criteria.add(Restrictions.like("id", "%"+firstMatch+"_"+secondMatch+"%")); 
+0

Giải pháp MySQL của bạn có vẻ sai - bạn đã thay thế dấu gạch dưới bằng dấu trừ (typo?). Và nếu bạn sử dụng dấu gạch dưới thay vì dấu trừ, bạn sẽ nhận được các kết quả sai, vì _ là một ký tự đại diện trong SQL giống như các truy vấn. –

+0

@FrankSchmitt câu trả lời được cập nhật – pudaykiran

Các vấn đề liên quan