JPA では、エンティティは注釈付きのプレーンな古い Java オブジェクトです。しかし、それらとデータベースを操作する良い方法が見つかりませんでした。
私の現在のアプリでは、基本的な設計は常に主キーとしてシーケンス ベースの ID を持つため、通常は PK 以外のプロパティでエンティティを検索する必要があります。
そして、エンティティごとに、次のステートレス EJB があります。
@Stateless
public class MyEntApiBean implements MyEntApi {
@PersistenceContext(unitName = "xxx") @Inject EntityManager entityManager;
すべてが何らかのバリエーションであるクエリメソッドを使用
/**
* @return A List of all MyEnts that have some property
* @param someProp some property
*/
public List<MyEnt> getAllMyEntsFromProp(final String someProp) {
try {
final Query query = entityManager.createQuery("select me from MyEnt me where me.someProp = :someProp");
query.setParameter("someProp", someProp);
return query.getResultList();
} catch(final NoResultException nre) {
log.warn("No MyEnts found");
}
return new ArrayList<MyEnt>();
}
そう:
これらのメソッドがエンティティ自体に属しているように見えるため、EJB にこれらのメソッドを含めるのは本当に嫌いです。また、EJB ローカル インターフェイスは、私を悩ませます。
「try、createQuery、getResultList、catch、log、return」を使用して各メソッドに重複があるのは嫌いです(ほとんどの場合、クロージャーがないか、「withステートメント」などのJavaの結果です)。
私の問題の 1 つまたは両方に対処するエンティティおよびデータベースとやり取りするためのより良い方法について、誰か提案がありますか?
私は現在、ジェネリックとリフレクションを使用していくつかの基本メソッドを実行して、重複を減らすためにいくつかのジェネリッククエリメソッドを取得することを考えています (問題 2) (後でレビューのためにプロトタイプを公開します)。
ありがとう、アンダース