【问题标题】:Play Gae persistence not working for Set<Long>播放 Gae 持久性不适用于 Set<Long>
【发布时间】:2011-05-09 15:50:35
【问题描述】:

这是我的用户类

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(email) 从数据库中调用它时。它使用所有 Sets(如 idEvents)空值加载用户。

我正在使用带有 siena 和 gae 模块的 play 1.1。

知道什么地方出了问题吗?我尝试将集合声明为公开并使用列表而不是集合,但没有任何效果。

谢谢

【问题讨论】:

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


    【解决方案1】:

    我是 Siena 的首席开发人员,问题出在您的模型上。 你不能这样声明你的关系。

    首先,您是否希望使用 JSON 序列化将 idEvents 和 idPhotos 直接存储到您的对象中? 如果是,您应该使用@Embedded:

    @Embedded
    public List<Long> idEvents;
    

    在这种情况下,当您执行此操作时会自动检索 idEvents:

    List<User> users = User.all()...fetch();
    

    如果不是,您应该使用自动查询,这是在锡耶纳设计 Many2One 关系的简单方法。基本上,您将在 User 和 Event 之间创建一个关系(我想您已经有了这个类)

    @Filter("owner")
    public Query<Event> events; // this is called an "automatic-query"
    

    如果您没有使用新版本的 Siena with play(v1.0.0 现在正在使用 Play 进行测试),您将使用以下代码,因为 GAE 中没有 JOIN,您必须手动获取链接实体:

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

    如果您有任何问题,请随时问我!

    【讨论】:

    • 不客气!密切关注锡耶纳,它应该很快就会发展起来;)
    • 还有一件事.. 我可以将自动查询与具有许多字段的实体一起使用吗? (事件有一个用户和一个地方字段。在这种情况下,当我执行 user.events.fetch() 时,它总是返回一个空列表)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多