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