가장 간단하게 Where 절을 사용한 HQL은 다음과 같습니다.
s.createQuery("from Member m where m.name = '기선'");

위에서 '기선'과 같은 부분을 파라미터화 하는 방법에는 두 가지가 있습니다.
1. ? 를 사용하는 방법과
2. :를 사용하는 방법이 있습니다.

1. s.createQuery("from Member m where m.name = ? "); 이렇게 파라미터화 할 부분을 ? 로 표시하고 fluent interface 형태로 구현해 놓았기 때문에 뒤에 연달아서 .setParameter(0, "기선"); 을 덧 붙여 주면 됩니다.

2. s.createQuery("from Member m where m.name = :name "); 이렇게 :뒤에 변수 처럼 사용할 이름을 적어주고 .setParameter("name", "기선"); 이렇게 덧붙여 주면 됩니다. 파라미터가 여러개라면 이렇게 이름을 줘서 사용하는 것이 가독성이 좋을 듯 합니다.
이 때 파라미터의 타입을 명확히 주고 싶다면 setString과 같은 메소드를 setParameter대신에 사용하면 됩니다.

3. and 를 사용해서 여러 개의 조건을 줄 수도 있습니다.
이 때 여러 개의 조건을 줄 때 쿼리 결과를 최소한으로 줄여주는 조건문을 앞에 두는 것이 좋습니다.

public void testWhereHQL(){

       insertDatas();

       q = s.createQuery("select m from k_Member m where name='keesun'");

       assertEquals(1, q.list().size());

       //1

       q = s.createQuery("select m from k_Member m where name = ?")

              .setParameter(0, "keesun");

       assertEquals(1, q.list().size());

       //2

       q = s.createQuery("select m from k_Member m where name = :name")

              .setParameter("name", "keesun");

       assertEquals(1, q.list().size());

       //3

       q = s.createQuery("select m from k_Member m where name like :name and email like :email")

              .setString("name", "%a%")

              .setString("email", "%os.net");

       assertEquals(2, q.list().size());

}