1

私はJPAをいじっている最中です。ここまでで、ユーザー データを表すエンティティと、ユーザー データにアクセスするためのステートレス Bean を正常に作成できました。

ユーザーが作業できるデータは次のようになります ( SQLFiddle リンク)。

CREATE TABLE data
(
  email character varying(128) NOT NULL,
  data character varying(128) NOT NULL,
  lastchange timestamp NOT NULL,
  CONSTRAINT email_data PRIMARY KEY (email,data)
);

emailアイデアは、空のキーを持つすべてのユーザーに対して、変更されていない現在のバージョンを保存することです。次に、ユーザーがデータを変更して監査可能なバージョンを作成すると、emailフィールドにはユーザーの電子メールが入力されます。このようにして、各ユーザーはデータのコピーを変更できます。マージは後日の問題であり、私の質問の一部ではありません。

これで、エンティティは既に配置されています。EntityManager を使用してデータ レコードをロード/保存/検索するステートレス Bean を作成しました。最初にユーザー固有のバージョンをロードし、ユーザーがユーザー固有のバージョンを持っていない場合は変更されていないバージョンをロードするロジックはまだわかりません。

Bean の次の部分を考えてみましょう。

@Stateless
public class DataBean {

    @PersistenceContext(unitName = "authPU")
    private EntityManager em;

    public List<DataEntry> findAll() {
        TypedQuery<DataEntry> query = em.createQuery("SELECT d FROM data d", DataEntry.class);
        List<DataEntry> list = query.getResultList();
        return query.getResultList();
    }

    ...
}

このクラスにユーザー情報を挿入するにはどうすればよいですか? 最初に現在のユーザーのデータを取得する必要があります。次に、ユーザー固有のデータが利用できない場合は、すべてのユーザーのデータを取得します。

4

1 に答える 1

0

標準の EJB 認証を使用できます。次にSessionContext.getCallerPrincipal()、セッション Bean を呼び出してユーザー ID を取得できます。このユーザー ID を使用して、データベースを照会します。

この場合、認証ユーザー ID が電子メール アドレスと等しくない場合は、テーブル (ユーザー ID を含む) に別の列を追加する必要があります。

はるかに単純な (ただし洗練されていない) 方法は、電子メール アドレスを EJB サービス メソッドの引数に追加することです。公開 API の一部にするだけです。

于 2013-07-24T12:45:43.157 に答える