[java] Hibernate에서 명명된(Named) 쿼리 작성 방법은?

다음은 Hibernate에서 명명된 쿼리를 작성하는 방법입니다.

  1. hbm.xml 파일을 사용하는 경우:
    <hibernate-mapping>
        <query name="getUserById">
            <![CDATA[
                SELECT * FROM users WHERE id = :id
            ]]>
        </query>
    </hibernate-mapping>
    

    위의 예제에서 getUserById는 명명된 쿼리의 이름이고, :id는 매개변수로 전달될 값입니다.

  2. 애노테이션을 사용하는 경우:
    @NamedQueries({
        @NamedQuery(
            name = "getUserById",
            query = "SELECT u FROM User u WHERE u.id = :id"
        )
    })
    public class User {
        // ...
    }
    

    위의 예제에서 getUserById는 명명된 쿼리의 이름이고, :id는 매개변수로 전달될 값입니다. @NamedQuery 애노테이션을 사용하여 쿼리를 작성하고, @NamedQueries 애노테이션을 사용하여 여러 개의 명명된 쿼리를 정의할 수 있습니다.

이렇게 작성된 명명된 쿼리는 Hibernate에서 다음과 같이 사용할 수 있습니다.

Session session = sessionFactory.openSession();
Query query = session.getNamedQuery("getUserById");
query.setParameter("id", 1);
List<User> users = query.getResultList();

위의 예제에서 getNamedQuery 메서드를 사용하여 명명된 쿼리를 가져옵니다. setParameter 메서드를 사용하여 쿼리의 매개변수 값을 설정하고, getResultList 메서드를 사용하여 쿼리를 실행하고 결과를 가져옵니다.

명명된 쿼리는 데이터베이스 질의를 간편하게 작성할 수 있는 방법으로 Hibernate에서 제공하는 기능 중 하나입니다. Hibernate를 사용하면 SQL 쿼리 작성에 대한 부담을 덜 수 있으며, 유지보수가 쉬운 코드를 작성할 수 있습니다.

참고 자료: