java - JDO Google App Engine 验证用户

标签 java google-app-engine servlets persistence jdo

我一直在关注谷歌应用引擎教程,其中解释 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()) {

这是我目前所拥有的一部分,我需要将我的查询字符串调整为“where User = user”,但我每次都会遇到问题。

我的团队对象只包含键、用户、字符串和日期。

最佳答案

您可以在没有 JDOQL 的情况下执行此操作。如果用户只有一个团队,那么您可以使用 owned one to many relationship 对其进行建模这是双向的。

@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();

如果一个用户可以在多个团队中,则需要使用an unowned relationship .根据您的描述,听起来每个团队都有一个用户(?),因此您可能想要一个无主的多对多关系。

没有很好记录的部分是你不能使用 User 对象作为主键(主键的可能类型 are quite limited ),所以你最终经常使用电子邮件作为主键。 User 对象可以是一个字段,但为了使您的数据模型保持一致,您通常要么在各处使用电子邮件来指代用户,要么像我上面那样使用包装对象。

关于java - JDO Google App Engine 验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695254/

相关文章:

java - Java EE 应用程序和过滤器中的编写器和输出流

java - 在带有Java Selenium 的自动化框架中使用的OOP概念的一些实时示例是什么?

python - 使用过滤器在数据存储中查询多对多

java - HttpServlet : doPut is not called

java - 找不到类异常 com.mysql.jdbc.driver

python - 如何使用特定月份和年份查询具有日期字段的对象?

java - 如何将内部类 Controller 绑定(bind)到FXML?

java - 单击按钮显示图像

java - 你如何测试 GWT 代码?

Python dev_appserver 无法导入 `.so` 文件(枕头)