2014-09-29 3 views
0

사용자가 입력 할 수있는 중복 값을 확인하는 필터를 추가하려고합니다. 내 쿼리에서 어디서 잘못 될지 잘 모르겠습니다.중복 값을 필터링합니다.

내 검색어가 루프에 입력되어 이름이 이미 있는지 확인하지 않습니다.

저는 Google이 할 수있는 일에 상당히 익숙합니다. 누군가가 내 문제를 해결할 수있는 방법이나 더 나은 솔루션이 있는지 알려주면.

else if (commandEls[0].equals("add_director")) { 
     String name = commandEls[1]; 
     String gender = commandEls[2]; 
     String date_of_birth = commandEls[3]; 


     boolean duplicate = false; 
     //add a director record with the given fields to the datastore, don't forget to check for duplicates 

     Entity addDirectorEntity = new Entity("Director"); 

     // check if the entity already exits 
     // if !duplicate add, else "Already exisits" 

     Query directorExists = new Query("Movies"); 

     // Director Name is the primary key 
     directorExists.addFilter("directorName",Query.FilterOperator.EQUAL, name); 
     System.out.print(name); 
     PreparedQuery preparedDirectorQuery = datastore.prepare(directorExists); 

     System.out.print("outside");  
     for(Entity directorResult : preparedDirectorQuery.asIterable()){ 
      // result already exists in the database 
      String dName = (String) directorResult.getProperty(name); 
      System.out.print(dName); 
      System.out.print("finish"); 
      duplicate = true; 
     } 

     if(!duplicate){ 
      addDirectorEntity.setProperty("directorName",name); 
      addDirectorEntity.setProperty("directorGender",gender); 
      addDirectorEntity.setProperty("directorDOB",date_of_birth); 

      try{ 
       datastore.put(addDirectorEntity); 
       results = "Command executed successfully!"; 
      } 
      catch(Exception e){ 
       results = "Error"; 
      } 
     } 

     else { 
      results = "Director already exists!"; 
     } 

    } 

답변

0

비 조상 쿼리는 (귀하의 예제에서처럼) 결국 일관성, 그래서 그들은 안정적으로 중복 속성 값을 검색 할 수 없습니다. 조상 쿼리는 완전히 일관성이 있지만 엔티티 그룹을 사용하여 데이터를 구조화해야하며 쓰기 처리량이 필요합니다.

예제의 directorName 속성이 참으로 고유하면 Director 엔티티의 use it as the name in the key 수 있습니다. 그런 다음 새로운 Director 엔티티를 삽입 할 때 먼저 엔티티가 이미 존재하는지 (트랜잭션 내부에 있는지) 확인할 수 있습니다.

속성 값의 고유성을 보장하기 위해 Datastore에 기본 제공되는 방법이 없습니다. 이와 관련된 feature request에는 고유성 제약을 근사화하기위한 몇 가지 전략에 대한 설명이 포함되어 있습니다.

Datastore에서 queriesconsistency을 읽는 것이 좋습니다.

0

그건 올바른 일이지만 내 문제를 알아 냈습니다. 나는 Director를위한 Entity를 만들고 있는데, 영화의 경우 엔 그렇다.

관련 문제