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!で、私たちが取ることができる最善の行動方針は何ですか?サーバーに送信する必要のあるすべてのデータを1つのオブジェクトにまとめて、データベースに簡単に保存できるようにする方法が必要です。

編集:これが失敗する理由は、検証が失敗したためです。コレクションオブジェクトを検証するときに、どういうわけか「不正な値」と表示されます。これは避けられるのだろうかと思っていました。

解決策:コレクションをリストに変更すると、問題が解決しました。これは、Play1.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 サブジェクトでは、関係は「多」側で管理されます。その側は、関連するエンティティの ID を非表示フィールド (object.user.id の値を持つ) として保持する必要があります。これにより、関連するすべての問題が解決されます。

于 2011-04-01T14:20:57.443 に答える
1

失敗しません。実行中のトランザクションがある場合、すべてが永続化されます。トランザクションは通常、コントローラーではなくサービス内で実行されるため、コントローラーからサービスに渡す必要があることに注意してください。

于 2011-04-01T14:22:39.913 に答える