播放Gae持久性不适用于Set <long> </long>

时间:2011-05-09 15:50:36

标签: google-app-engine persistence set playframework siena

这是我的用户类

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,但没有任何效果。

由于

1 个答案:

答案 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并编写大量文档来解释比现在更好的一切;)

如果您有任何疑问,请随时向我询问!