0

ОК, вот моя необходимость. Я хочу создать веб-приложение с помощью Google App Engine Datastore в качестве базы данных.Как создать структуру объектов с использованием хранилища данных Google App Engine для данной конкретной ситуации?

Приложение позволяет зарегистрировать учетную запись бесплатно. Когда каждый зарегистрированный пользователь может иметь сберегательную учетную запись, они могут депонировать или снимать деньги на своей сберегательной учетной записи.

Использования информации в этой ссылке https://cloud.google.com/appengine/docs/java/datastore/entities

Я придумал этот код

public class RegistrationServlet extends HttpServlet { 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String name = request.getParameter("name"); 
     String email = request.getParameter("email"); 
     String pass = request.getParameter("pass"); 

     DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 


     Entity user = new Entity("User"); 
     user.setProperty("name",name); 
     user.setProperty("email",email); 
     user.setProperty("pass",pass); 


     datastore.put(user); 
    } 

    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 
     DatastoreService ds=DatastoreServiceFactory.getDatastoreService(); 

     String email = request.getParameter("email"); 
     String pass = request.getParameter("pass"); 
     double credit=request.getParameter("credit"); 
     double debit=request.getParameter("debit"); 

     int userKeyInt=0; 
     Query q=new Query ("User"); 
     PreparedQuery pq=ds.prepare(q); 
     for (Entity u1:pq.asIterable()){ 
      String emailStr=u1.getProperty("Email").toString(); 
      String userIDStr=u1.getProperty("UserID").toString(); 
      String passStr=u1.getProperty("Pass").toString(); 
      if(emailStr.equals(email) && passStr.equals(pass)) { 
       userKeyInt=Integer.parseInt(userIDStr); 
      } 
     } 
     Key userKey=KeyFactory.createKey("User", userKeyInt); 
     try{ 
      Entity user = ds.get(key); 

      Entity savingAccount=new Entity ("SavingAccount"); 
      savingAccount.setProperty("UserID", user.getKey()); 
      savingAccount.setProperty("Debit",debit); 
      savingAccount.setProperty("Credit",credit); 


     } 

     catch (EntityNotFoundException e){ 
      e.printStackTrace(); 
     } 


    } 
} 

Так SavingAccount имеет поле «UserID», который играет роль внешнего ключа.

Entity user = new Entity("User"); 
Entity savingAccount=new Entity ("SavingAccount"); 
savingAccount.setProperty("UserID", user.getKey()); 

Но я не уверен, что я делаю правильно, потому что нет никакого способа проверить ЗАРУБЕЖНЫЕ ключа ограничения, мы должны иметь Моделирование сущностей Отношения, как указано в ссылке https://cloud.google.com/appengine/articles/modeling?

Если мне действительно нужно Моделирование связей сущности, то как это сделать?

Примечание: У каждого пользователя может быть много Сберегательных счетов.

+0

NB1: Не вызывайте 'toString()' при вызове 'getProperty' - используйте cast. В противном случае вы никогда не узнаете, допустили ли вы ошибку и сохранили неправильный тип данных в свойстве. –

+0

NB2: Это очень неэффективно для всех пользователей. Используйте запрос, чтобы найти одного пользователя с правильным адресом электронной почты. –

+0

NB3: Почему вы сохраняете UserID как свойство в объекте пользователя? Используйте идентификаторы, автоматически генерируемые хранилищем данных. Кроме того, идентификаторы хранятся как длинные значения - использование целых чисел может привести к проблемам. –

ответ

1

Вы можете сделать SavingAccountEntity дочерним объектом UserEntity. Это может стать полезным, поскольку вы можете решить обновить свои сущности в транзакции, чтобы сохранить целостность данных.

С помощью этого подхода вы можете получить все сохраненные учетные записи, принадлежащие пользователю, с простым запросом предка на SavingAccountEntity.

+0

Эффективно ли это делать? ** Entity user = new Entity («Пользователь», «tom @ gmail.com "); **". Мы просто используем электронную почту как идентификатор пользователя. Если мы это сделаем, то это медленнее, чем если бы мы использовали «Использовать идентификаторы, автоматически генерируемые хранилищем данных» – Tom

+0

В этом видео (https://www.youtube.com/watch?v=i3i2BXq4Exw&list=PLjRJFNWV27juPRBp_x04hfaRrrKVex-hb) в ** 36: 25 **, мы можем видеть этот код »** Entity ikai = new Entity (« Пользователь »,« [email protected] ») **». Я думаю, что использовать электронную почту как UserID в порядке – Tom

+0

alos, как насчет отношений «многие ко многим», как нам управлять отношениями «многие-ко-многим»? Я видел эту ссылку https://cloud.google.com/appengine/docs/java/datastore/jdo/relationship, но не уверен, что он правильный – Tom

 Смежные вопросы

  • Нет связанных вопросов^_^