这是我的用户类
public class User extends Model {
@Id
public Long id;
public String nome;
public String email;
public String webId; //ID of the user in the provider website
public String passwordHash;
public String service;
//Relazioni
private Set<Long> idEvents = new HashSet<Long>();
...
private Set<Long> idPhotos= new HashSet<Long>();
public User(String email, String name,String webId, String passwordHash, String service) throws Exception {
...
}
static Query<User> all() {
return Model.all(User.class);
}
public static User findByEmail(String email){
return all().filter("email", email).get();
}
}
当我创建它并将其插入数据库时,它似乎工作正常。但是当我使用 findByEmail(电子邮件)从数据库中回忆起它时。它为用户加载所有 Sets(如 idEvents)空值。
我正在使用带有锡耶纳和 gae 模块的 play 1.1。
知道可能出了什么问题吗?我尝试将集合声明为公共并使用列表而不是集合,但没有任何效果。
谢谢
我是锡耶纳的首席开发人员,问题来自你的模型。你不能那样声明你们的关系。
首先,您是否希望使用 JSON 序列化将 idEvents 和 idPhotos 直接存储到您的对象中?如果是,则应使用以下@Embedded:
@Embedded
public List<Long> idEvents;
在这种情况下,当您执行以下操作时,将自动检索 idEvents:
List<User> users = User.all()...fetch();
如果没有,您应该使用自动查询,这是在锡耶纳设计 Many2One 关系的简单方法。基本上,您将在用户和事件之间创建关系(我想您已经有了这个类)
@Filter("owner")
public Query<Event> events; // this is called an "automatic-query"
如果您没有将新版本的Siena与play一起使用(v1.0.0现在正在与Play一起测试),则可以使用以下代码,因为GAE中没有JOIN,您必须手动获取链接的实体:
User user = someUser();
List<User> theEvents = user.events.fetch();
那里有全球解释:http://www.sienaproject.com/documentation-getting-started.html
锡耶纳在最后几天进行了深度重构:它正在得到改进,并且还通过许多新功能进行了增强。当前版本是版本 1.0.0_b2。
我希望我们能尽快交付最终版本1.0.0,并编写大量文档来解释比现在更好的一切;)
如果您有任何问题,请随时问我!