ОК, вот моя необходимость. Я хочу создать веб-приложение с помощью 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?
Если мне действительно нужно Моделирование связей сущности, то как это сделать?
Примечание: У каждого пользователя может быть много Сберегательных счетов.
NB1: Не вызывайте 'toString()' при вызове 'getProperty' - используйте cast. В противном случае вы никогда не узнаете, допустили ли вы ошибку и сохранили неправильный тип данных в свойстве. –
NB2: Это очень неэффективно для всех пользователей. Используйте запрос, чтобы найти одного пользователя с правильным адресом электронной почты. –
NB3: Почему вы сохраняете UserID как свойство в объекте пользователя? Используйте идентификаторы, автоматически генерируемые хранилищем данных. Кроме того, идентификаторы хранятся как длинные значения - использование целых чисел может привести к проблемам. –