Enterprise 中級

リポジトリインターフェースを宣言するだけで、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
難易度
中級
JPAとJakarta Dataの比較
利用可能

Jakarta EE 11 / Java 21(2024年)以降、利用可能

Jakarta Data(Jakarta EE 11)はデータアクセスを純粋なインターフェース宣言に変えます。@Repositoryアノテーションを付けてCrudRepositoryなどの組み込みリポジトリ型を継承するだけで、ランタイムが実装を生成します。findByNameのようなメソッド名から派生クエリも自動生成されるため、EntityManagerのボイラープレート・JPQL文字列・手書きのsave/findメソッドは不要です。

共有 𝕏 🦋 in