0

エンタープライズアプリケーションでORMツールを使用するのは初めてです。JPA2.0とEE6を使用するスケーラブルなアプリケーションを構築しています。アプリケーションを構築するための適切なパターンを見つけようとしていますが、エンティティの同期を維持する方法が見つかりません(エンティティにアクセスするBeanをプールしたい)。

例:

私はグループを持っています:

@Entity
public class Group implements Serializable
{
    @Id
    private Long id;
    @OneToMany
    private List<MyUser> myUsers;

    public Group()
    {
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public void addUser(MyUser u)
    {
        myUsers.add(u);
    }
}

そして私にはユーザーがいます

@Entity
public class MyUser implements Serializable
{
    @Id
    private Long id;

    public MyUser()
    {
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

}

これで、ユーザーをグループに追加または削除するステートレスBeanがある場合、ステートレスBeanの別のインスタンスに古い情報が含まれるリスクがあります。このためのベストプラクティスは何ですか?

4

1 に答える 1

5

ステートレスBeanは...状態を保持するべきではないため、設計上の問題が正確に何であるかはわかりません。オンデマンドでユーザーグループを取得し、更新してから、DBに永続化する必要があります。同時更新が本当に心配で、より厳密な制御が必要な場合は、エンティティでロックモードを使用してみてください。

  • OPTIMISTICJPA 1.0は、バージョン番号( 、 )による楽観的ロックをサポートしますOPTIMISTIC_FORCE_INCREMENT
  • JPA 2.0は、悲観的なロックを追加します(INCREMENTPESSIMISTIC_FORCE_INCREMENT

システム内で同じエンティティに対して大量の競合がある場合にのみ、ペシミスティックロックを使用してください。これは、拡張性が低いためです。

追加の読み物と例

于 2012-04-16T10:53:10.113 に答える