私は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();
}
...
}
このクラスにユーザー情報を挿入するにはどうすればよいですか? 最初に現在のユーザーのデータを取得する必要があります。次に、ユーザー固有のデータが利用できない場合は、すべてのユーザーのデータを取得します。