这是我的用户类
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(电子邮件)从数据库中回忆起它时。它为用户加载所有集合(如idEvents)null。
我正在使用siena和gae模块播放1.1。
有什么可能出错的想法吗?我尝试将public声明为public并使用列表而不是set,但没有任何效果。
由于
答案 0 :(得分:3)
我是锡耶纳的首席开发人员,问题来自您的模型。 你不能这样声明你的关系。
首先,您是否希望使用JSON序列化将idEvents和idPhotos直接存储到您的对象中? 如果是,您应该使用@Embedded:
@Embedded
public List<Long> idEvents;
在这种情况下,执行以下操作时会自动检索idEvents:
List<User> users = User.all()...fetch();
如果不是,您应该使用自动查询,这是在Siena中设计Many2One关系的简单方法。基本上,您将在用户和事件之间创建一个关系(我想您已经有了这个类)
@Filter("owner")
public Query<Event> events; // this is called an "automatic-query"
如果您没有使用新版本的Siena with play(v1.0.0现在正在使用Play进行测试),您将使用以下代码,因为GAE中没有JOIN,您必须手动获取链接实体:< / p>
User user = someUser();
List<User> theEvents = user.events.fetch();
在那里全球解释:http://www.sienaproject.com/documentation-getting-started.html
Siena在最后几天进行了深刻的重构:它正在得到改进,并且还增加了许多新功能。当前版本是1.0.0_b2版本 我希望我们能尽快交付最终版本1.0.0并编写大量文档来解释比现在更好的一切;)
如果您有任何疑问,请随时向我询问!