JPAとJakarta Dataの比較
リポジトリインターフェースを宣言するだけで、Jakarta DataがDAO実装を自動生成する。
コード比較
✕ Jakarta EE 8+
@PersistenceContext
EntityManager em;
public User findById(Long id) {
return em.find(User.class, id);
}
public List<User> findByName(String name) {
return em.createQuery(
"SELECT u FROM User u WHERE u.name = :name",
User.class)
.setParameter("name", name)
.getResultList();
}
public void save(User user) {
em.persist(user);
}
✓ Jakarta EE 11+
@Repository
public interface Users extends CrudRepository<User, Long> {
List<User> findByName(String name);
}
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
ゼロボイラープレート
インターフェースを宣言するだけで、コンテナがデプロイ時に完全なDAO実装を生成します。
派生クエリ
findByNameAndStatusのようなメソッド名が自動解析されます——JPQLやSQLは不要です。
ポータブル
Jakarta EE 11準拠ランタイムならどれでもリポジトリ実装を提供し、ベンダーロックインがありません。
旧来のアプローチ
JPA EntityManager
モダンなアプローチ
Jakarta Dataリポジトリ
JDKバージョン
21
難易度
中級
JDKサポート
JPAとJakarta Dataの比較
利用可能
Jakarta EE 11 / Java 21(2024年)以降、利用可能
仕組み
Jakarta Data(Jakarta EE 11)はデータアクセスを純粋なインターフェース宣言に変えます。@Repositoryアノテーションを付けてCrudRepositoryなどの組み込みリポジトリ型を継承するだけで、ランタイムが実装を生成します。findByNameのようなメソッド名から派生クエリも自動生成されるため、EntityManagerのボイラープレート・JPQL文字列・手書きのsave/findメソッドは不要です。
関連ドキュメント