【问题标题】:JDO Google App Engine validate userJDO Google App Engine 验证用户
【发布时间】:2023-04-03 11:57:01
【问题描述】:

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

这是我到目前为止的一部分,我需要将我的查询字符串调整为“用户 = 用户”,但每次都会遇到问题。

我的 Team 对象只包含 Key、User、String 和 Date。

【问题讨论】:

    标签: java google-app-engine servlets persistence jdo


    【解决方案1】:

    您可以在没有 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 对象可以是一个字段,但为了使您的数据模型保持一致,您通常要么在任何地方使用电子邮件来引用用户,要么像我上面那样使用包装器对象。

    【讨论】:

    • 我在使用您的方法时遇到错误:将 test@example.com 转换为内部密钥时出现异常。我认为它可能来自我代码中的其他地方,但无法找到它的来源
    • 抱歉,刚刚看到您的编辑不能使用用户作为主键
    • 如果我错了请纠正我,但是使用“user.getUserId()”作为主键不是更好吗?code.google.com/appengine/docs/java/javadoc/com/google/…
    • 看起来 User.getUserId() 会是一个不错的选择,但我从未尝试过。如果你有并且它有效,我会更新答案
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 2010-12-11
    • 2011-12-28
    • 2011-06-19
    • 1970-01-01
    • 2013-01-11
    • 2017-05-04
    • 2011-05-29
    相关资源
    最近更新 更多