[java] Hibernate에서 두 개의 테이블을 조인하여 데이터 조회하는 방법은?

Hibernate를 사용하여 두 개의 테이블을 조인하여 데이터를 조회하는 방법을 알아보겠습니다. Hibernate는 객체 관계 매핑 (ORM) 도구로서, SQL을 직접 작성하지 않고도 객체를 통해 데이터베이스 조작을 수행할 수 있습니다.

먼저, 두 개의 테이블을 조인하기 위해서는 엔티티 클래스와 매핑된 두 개의 테이블이 필요합니다. 예를 들어, “User” 테이블과 “Role” 테이블이 있다고 가정해봅시다.

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    // ... 다른 필드 및 getter/setter 메서드 생략
}

@Entity
@Table(name = "role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String roleName;
    
    // ... 다른 필드 및 getter/setter 메서드 생략
}

위의 예제에서는 User 클래스와 Role 클래스가 각각 User 테이블과 Role 테이블과 매핑되도록 하였습니다.

이제 조인 쿼리를 작성하고 데이터를 조회하는 코드를 작성해보겠습니다.

String hql = "SELECT u.id, u.name, r.roleName " +
             "FROM User u " +
             "JOIN Role r ON u.id = r.userId";

Query query = entityManager.createQuery(hql);
List<Object[]> results = query.getResultList();

for (Object[] result : results) {
    Long userId = (Long) result[0];
    String userName = (String) result[1];
    String roleName = (String) result[2];
    
    System.out.println("User ID: " + userId);
    System.out.println("User Name: " + userName);
    System.out.println("Role Name: " + roleName);
}

위의 코드에서는 Hibernate의 HQL (Hibernate Query Language)을 사용하여 조인 쿼리를 작성하였습니다. User 엔티티와 Role 엔티티를 조인하고, 연결된 userId를 사용하여 결과를 조회하였습니다. 조회된 결과는 Object 배열로 반환되며, 필요한 데이터를 추출하여 출력할 수 있습니다.

이렇게 Hibernate에서 두 개의 테이블을 조인하여 데이터를 조회하는 방법에 대해 알아보았습니다. Hibernate를 사용하면 SQL 쿼리를 직접 작성하지 않고도 객체를 통해 데이터를 손쉽게 조작할 수 있습니다.