JDO Google App Engine подтвердить пользователя - PullRequest
3 голосов
/ 12 сентября 2010

Я следовал учебному пособию по движку приложений Google, и часть, объясняющая JDO, сделана на основе гостевой книги. Поэтому, когда они запрашивают постоянство (я думаю, BigTable), они заинтересованы в возвращении всех результатов.

Я пытаюсь приспособить это для отображения результатов для конкретного пользователя, но, похоже, у него проблемы с этим.

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if(user != null) {
    PersistenceManager pm = PerManFac.get().getPersistenceManager();
    String query = "select * from " + Team.class.getName();
    List<Team> teamList = (List<Team>) pm.newQuery(query).execute();
    if(teamList.isEmpty()) {

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

Объект My Team содержит только ключ, пользователя, строку и дату.

1 Ответ

1 голос
/ 12 сентября 2010

Вы можете сделать это без JDOQL. Если у пользователя есть только одна команда, то вы можете смоделировать это с отношением «один ко многим» , которое является двунаправленным.

@PersistenceCapable
public class Team {
  @Persistent(mappedBy = "team")
  private List<Employee> employees;
}

@PersistenceCapable
public class Employee {
  @PrimaryKey
  private String user;

  @Persistent
  private Team team;
}

Чтобы получить Employee, вы можете отправить запрос по электронной почте:

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

PersistenceManager pm = PMF.get().getPersistenceManager();
Employee employee = pm.getObjectById(Employee.class, user.getEmail());
Team employee.getTeam();

Если пользователь может быть во многих командах, вам нужно использовать неизвестное отношение . Из вашего описания звучит так, что у каждой команды есть один пользователь (?), Поэтому вам может понадобиться неизвестное отношение «многие ко многим».

Часть, которая не очень хорошо документирована, состоит в том, что вы не можете использовать объект User в качестве первичного ключа (возможные типы для первичного ключа весьма ограничены ), поэтому вы часто сталкиваетесь используя электронную почту в качестве первичного ключа. Объект User может быть полем, но чтобы сделать вашу модель данных согласованной, вы часто либо используете электронную почту везде, чтобы ссылаться на пользователя, либо используете объект-оболочку, как я делал выше.

...