1

我正在使用游戏框架 1.2.4,并且我有一个个人资料页面,其中包含许多分段的元素(基本信息、教育、工作经验等)。

Person model看起来像这样:

@Entity
@Table(name="Persons")
public class Person extends GenericModel implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="Id",nullable=false,unique=true)
    private int id;

    @Column(name="FirstName",nullable=false)
    private String firstName;

    @Column(name="MiddleInitial")
    private String middleInitial;

    @Column(name="LastName",nullable=false)
    private String lastName;

    @Column(name="Born",nullable=false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private java.util.Date born;

    @Column(name="Sex",nullable=false)
    private String sex;

    @Email
    @Column(name="Email",nullable=false,unique=true)
    private String email;

    @Column(name="City")
    private String city;

...

在控制器中我有这个:

public static void updatePerson(Person person) {
              person.validateAndSave(); 
 }

我想向模型发送更新的子集,即具有提交选项的表单的一部分只有person.firstName, person.lastName, person.dob

在视图中,我使用 JPA 对象绑定的点表示法发送参数,即(person.firstName,person.lastName 等)来自播放文档:

http://www.playframework.org/documentation/1.2/controllers#objectbinding

我遇到的问题是,这种类型的绑定看起来需要模型的所有字段,所以我在那些没有在特定视图中设置的字段上遇到 NULL 违规。

我当前的代码正在使用JPA.em().createQuery解决它,但我遇到了不同的类型问题......

我正在寻找更好的方法?有什么想法吗?

4

1 回答 1

1

你有几个选项在这里

1) 创建仅用于事务的表单对象。向导过程的每个部分都有一个不同的对象,向导过程的最后部分会将所有这些对象转换为最终的模型对象。

2)第二个选项是在你的模型中允许空值并接受你的数据库可能包含不完整的对象数据

3)在最后一步之前不要保存到数据库中,而是将您在以前表单上收集的数据保存到当前表单的隐藏字段中,以便在最后一步中,所有数据都作为对象传入,并且可以简单地保存。

于 2012-04-15T19:25:55.287 回答