具有字段子集的JPA更新模型

时间:2012-04-15 19:09:28

标签: hibernate model-view-controller jpa playframework

我正在使用播放框架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来解决它,但我遇到类型问题......

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

1 个答案:

答案 0 :(得分:1)

这里有几个选项

1)创建仅为事务保留的Form对象。向导过程的每个部分都有一个不同的对象,向导过程的最后一部分会将所有这些对象转换为最终的Model对象。

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

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