2

我的团队正在编写一个涉及编辑类似维基百科的页面的应用程序。这类似于我们在注册时遇到的问题:

一个简单的实现给出了类似的东西

public static void doRegistration(User user) {
//...
}

用户参数是 JPA 实体。用户模型看起来像这样:

@Entity
public class User extends Model {

//some other irrelevant fields

@OneToMany(cascade = CascadeType.ALL)
public Collection<Query> queries;

@OneToMany(cascade = CascadeType.ALL)
public Collection<Activity> activities;
//...

我在这里那里读到这失败了。现在,在 Play! 中,我们可以采取的最佳行动方案是什么?必须有某种方法可以将必须​​发送到服务器的所有数据放在一个对象中,以便可以轻松地将其保存到数据库中。

编辑:失败的原因是验证失败。在验证集合对象时,它以某种方式说“值不正确”。我想知道这是否可以避免。

解决方案:将集合更改为列表已解决该问题。这是一个将在 play 1.2 中修复的错误 :)

预先感谢

4

2 回答 2

1

这行得通。更清楚地说,您可以定义一个控制器方法,就像您编写的那样:

public static void doRegistration(User user) {
//...
}

那完全没问题。只需将其映射到 POST 路由并使用 #{form} 提交对象,例如:

#{form id:'myId', action:@Application.doRegistration()}
   #{field user.id} 
   [...]
#{/form}

这行得通。如果您没有在表单中添加实体的所有字段,您可能会遇到问题(如果某些字段不可编辑,请使用隐藏输入或 NoBinding 注释,如此处所述

编辑:在 OneToMany 主题上,关系将由“Many”方管理。该方必须将相关实体的 id 保留为隐藏字段(值为 object.user.id)。这将解决所有相关问题。

于 2011-04-01T14:20:57.443 回答
1

它不会失败。如果您有一个正在运行的事务,则整个事务将被持久化。请注意,事务通常在服务中运行,而不是在控制器中,因此您应该将其从控制器传递给服务。

于 2011-04-01T14:22:39.913 回答