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 オブジェクト バインディング ie(person.firstName、person.lastName など) のドット表記を使用してパラメーターを送信しています。プレイ ドキュメントから:

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

私が抱えている問題は、このタイプのバインディングにはモデルのすべてのフィールドが必要なように見えるため、特定のビューで設定されていないフィールドで NULL 違反が発生することです。

私の現在のコードはそれを使用しJPA.em().createQueryていますが、型に関してさまざまな問題が発生しています...

私はより良い方法を探していますか?何かご意見は?

4

1 に答える 1

1

ここにはいくつかのオプションがあります

1)トランザクションのためだけに保持されるFormオブジェクトを作成します。ウィザードプロセスの各部分には異なるオブジェクトがあり、ウィザードプロセスの最後の部分では、これらすべてのオブジェクトが最終的なモデルオブジェクトに変換されます。

2)2番目のオプションは、モデルでnull値を許可し、データベースに不完全なオブジェクトデータが含まれている可能性があることを受け入れることです。

3)最後のステップまでデータベースに保存しないでください。ただし、前のフォームで収集したデータを現在のフォームの非表示フィールドに保存して、最後のステップですべてのデータがオブジェクトとして渡され、単純に保存しました。

于 2012-04-15T19:25:55.287 に答える