안녕하세요 여러분, NamedQuery를하는 동안 정확히 일치하는 문제가 있습니다.JAVA : NamedQuery 문자열 문제
나는 현재이 같은 것을 사용하고 있습니다 :
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME)
...
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName());
그것은 대부분의 경우 작동하지만 나는 경우 사용자가 끝에 공백으로 파일 이름을 전달할 것으로 나타났습니다은 namedQuery는 문자를 무시합니다. 예 :
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName()+ " ");
이전에 쿼리와 동일한 결과를 반환합니다. 내 '유효한 입력'검증을 우회합니다. 즉, 쿼리를 전혀 항목을 반환하고 나중에 오류를 처리하고 싶습니다. 내가 생각할 수있는
한 가지 해결 방법은이처럼 namedQuery 내 매개 변수를 둘러싼 작은 따옴표를 넣어하는 것입니다 내 코드를 쓰레기 것이다 그러나
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")
이 경우 문자열은 작은 따옴표가 들어 있습니다 .. .
어떤 아이디어가 있니?
안녕하세요 axtavt, 답장을 보내 주셔서 감사합니다. 음, 내 데이터베이스는 VARCHAR로 설정됩니다. 그러나 MySql 버전이이 문제와 관련이 있는지 확실하지 않습니다. 또한 쿼리의 매개 변수를 설정하기 전에 일부 작업을 수행하는 방법에 대해 생각했지만 사용자가 원하는 정보를 정확하게 입력하고 있는지 확인하기 위해 데이터베이스와 다른 오류를 반환하는 소프트웨어를 원했습니다. –
@flavio : MySQL에 익숙하지 않아 기능에 대해 말할 수 없습니다. 또한 내 쿼리 샘플은 매개 변수가 아니라 저장된 값을 트림하므로 결과가 정확해야합니다. – axtavt
Query를 빌드하는 과정을 검사하는 코드를 디버깅했습니다 ... 제공 한 코드를 사용하면 문제가 mySql 내에있는 것처럼 보입니다. 나는 매개 변수와 데이터베이스 항목이 다르다는 것을 알아 차렸다. 그러나 미지의 신비한 신성한 힘을 위해 MySql은 공백을 제거하고 정확히 일치하는 것으로 간주한다 ... 이제는 이것이 어떤 것인지 조사하기위한 연구가 필요하다고 생각한다. 실제로 MySql은 예상되는 동작이거나 그 뒤에 뭔가가 있습니다. 지금 나는 여분의 수표를 만들어야한다고 생각합니다. 감사! –