无法从siena中另一个对象的对象获取字符串字段

时间:2011-05-28 15:24:46

标签: java playframework siena

我无法获取位于另一个对象内的对象中的字段。我可以得到一些领域,但其他人没有。

这是我为重现此错误而创建的测试。

public void commentTest(){
    try {
        new MyUser("mauri@mail.com","Maurizio Pozzobon","01","facebook","hash").insert();
    } catch (Exception e) {}
    MyUser user = MyUser.findByEmail("mauri@mail.com");
    Place place = new Place(user,"posto","bel posto",null,null);
    place.insert();
    assertNotNull(user);
    Event e =new Event(user,place, "Festa","Questa è una gran bella festa",null,new Date(),(long) 10,false,null);
    e.insert();
    assertNotNull(user.nome);
    EventComment ec = new EventComment(user, e, "TestComment", new Date());
    ec.insert();
    List<EventComment> ecs = e.comments.fetch();
    for (EventComment comment : ecs) {
        assertNotNull(comment.user.id);
        MyUser us= MyUser.findById(comment.user.id);
        assertNotNull(us.nome);
        assertNotNull(comment.user.nome);
    }
} 

它在

行失败了
assertNotNull(comment.user.nome);

这不是一个交易破坏者,因为我仍然可以到该字段进行其他调用数据库,但看起来很奇怪我可以访问某些字段而其他字段不能

在MyUser中,我尝试使用和不使用以下注释声明'nome'字段

@Column("nome")
@Max(200) @NotNull
public String nome;

1 个答案:

答案 0 :(得分:0)

基本没有,这是正常的 你使用GAE,我是对的吗? 在GAE中,请记住SQL DB中没有JOIN 获取注释时,不会完全获取链接的用户,只会填充user.id字段。这就是assertNotNull(comment.user.id)没问题的原因 因此,默认情况下,如果您希望用户与评论相关联,则需要手动提取。

这个限制应该很快就会改变,因为我们将很快提供实体分组,还会有一个新的注释@Join,它将自动获取链接的实体。

您已经可以尝试此注释但尚未最终确定。 在评论课中,添加@Join:

@Join
@Column("user")
User user;

然后当你获取一条评论时,它也会用它来获取用户。

Comment comment = Comment.findById("id", value);  
assertNotNull(comment.user.nome); // will be OK.

但它不适用于此案:List<EventComment> ecs = e.comments.fetch();
这种联接要复杂得多,在我们进行实体分组之前,它会占用太多资源。