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

Hibernate 具有字段子集的JPA更新模型,hibernate,model-view-controller,jpa,playframework,Hibernate,Model View Controller,Jpa,Playframework,我使用的是PlayFramework1.2.4,我有一个配置文件页面,页面上有许多元素,这些元素分为几个部分(基本信息、教育、工作经验等) 人物模型如下所示: @Entity @Table(name="Persons") public class Person extends GenericModel implements Serializable { private static final long serialVersionUID = 1L; @Id @Gener

我使用的是PlayFramework1.2.4,我有一个配置文件页面,页面上有许多元素,这些元素分为几个部分(基本信息、教育、工作经验等)

人物模型
如下所示:

@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等):

我遇到的问题是,这种类型的绑定似乎需要模型的所有字段,所以在特定视图中没有设置的字段上,我得到了空冲突

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


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

这里有一些选择

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

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


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

这里有一些选项

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

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


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

我建议选择1,让一些临时对象在窗体和控制器之间移动数据,并在其中将数据移动到模型中。这样也可以避免将数据暴露给恶意用户。感谢回复。但是什么是表单对象呢?我建议选项1,让一些临时对象在表单和控制器之间移动数据,并在其中将数据移动到模型中。这样也可以避免将数据暴露给恶意用户。感谢回复。但是游戏中的物体是什么形式的呢?