개요
In this guide, you can learn how to use the MongoDB Extension for Hibernate ORM to run create, read, update, and delete (CRUD) operations on your MongoDB collections.
샘플 데이터
이 가이드 의 예제에서는Atlas 샘플 데이터 세트의 Movie sample_mflix.movies 컬렉션 나타내는 엔터티를 사용합니다. Movie 엔터티의 정의는 다음과 같습니다.
import com.mongodb.hibernate.annotations.ObjectIdGenerator; import org.bson.types.ObjectId; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; public class Movie { private ObjectId id; private String title; private String plot; private int year; private String[] cast; public Movie(String title, String plot, int year, String[] cast) { this.title = title; this.plot = plot; this.year = year; this.cast = cast; } public Movie() { } public ObjectId getId() { return id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPlot() { return plot; } public void setPlot(String plot) { this.plot = plot; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public String[] getCast() { return cast; } public void setCast(String[] cast) { this.cast = cast; } }
최대 절전 모드용 MongoDB 확장 ORM을 사용하여 이 MongoDB 샘플 컬렉션 과 상호 작용 Java 애플리케이션 을 만드는 방법을 학습 시작하기 튜토리얼을 참조하세요.
중요
지속성 컨텍스트
하이버네이트 ORM이 데이터베이스 와 상호 작용 활성화 하려면 하이버네이트 Session 또는 자카르타 퍼시스턴스 EntityManager를 사용하여 퍼시스턴스 컨텍스트 내에서 작업을 실행 해야 합니다. 또한 트랜잭션 내에서 쓰기 (write) 작업을 실행 MongoDB 데이터를 수정하고 데이터 무결성을 유지해야 합니다.
이 가이드 의 예제를 실행 전에 다음 코드와 유사한 지속성 컨텍스트 및 트랜잭션 관리 코드를 애플리케이션 에 추가해야 합니다.
var sf = HibernateUtil.getSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); // ... Perform CRUD operations here tx.commit(); session.close(); sf.close();
세션을 HibernateUtil.java 사용하려면 를 구성하는 파일 만들어야 SessionFactory 합니다. 자세히 학습 시작하기 튜토리얼의 애플리케이션 구성 단계를 참조하세요.
// Replace <persistence unit> with the name of your persistence unit in the persistence.xml file EntityManagerFactory emf = Persistence.createEntityManagerFactory("<persistence unit>"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); // ... Perform CRUD operations here entityManager.getTransaction().commit(); entityManager.close(); emf.close;
To use an EntityManager, you must create a persistence.xml file that declares a persistence unit. To learn more, see the Tutorial using JPA-standard APIs in the Hibernate ORM documentation.
문서 삽입
컬렉션 에 문서 삽입하려면 새 엔터티 인스턴스 만듭니다. 그런 다음 이 인스턴스 다음 메서드에 인수로 전달하여 MongoDB 컬렉션 에 문서 로 저장할 수 있습니다.
org.hibernate.Session.persist(): 최대 절전 모드 API 사용하여 데이터베이스 에 변경 사항 적용jakarta.persistence.EntityManager.persist(): 자카르타 지속성 API 사용하여 데이터베이스 에 변경 사항 적용
예시
다음 예시 새 Movie 엔터티 인스턴스 만들고 persist() 메서드를 사용하여 해당 문서 sample_mflix.movies 컬렉션 에 삽입합니다.
var myMovie = new Movie(); myMovie.setTitle("Knives Out"); myMovie.setYear(2019); myMovie.setCast(new String[]{"Ana de Armas", "Daniel Craig", "Chris Evans"}); myMovie.setPlot("Detective Benoit Blanc investigates the mysterious death of crime novelist Harlan Thrombey, " + "unraveling lies as every Thrombey family member becomes a suspect."); session.persist(myMovie);
var myMovie = new Movie(); myMovie.setTitle("Knives Out"); myMovie.setYear(2019); myMovie.setCast(new String[]{"Ana de Armas", "Daniel Craig", "Chris Evans"}); myMovie.setPlot("Detective Benoit Blanc investigates the mysterious death of crime novelist Harlan Thrombey, " + "unraveling lies as every Thrombey family member becomes a suspect."); entityManager.persist(myMovie);
문서 읽기
컬렉션 에서 문서를 조회 하려면 쿼리 기준을 createQuery() 메서드에 전달합니다. 다음 API는 모두 createQuery() 메서드를 제공합니다.
하이버네이트의
SessionAPI: 하이버네이트 쿼리 언어(HQL) 구문을 사용하여 쿼리 정의하기자카르타 퍼시스턴스의
EntityManagerAPI: HQL의 하위 집합인 자카르타 퍼시스턴스 쿼리 언어(JPQL) 구문을 사용하여 쿼리를 정의합니다.
참고
이 섹션에서는 HQL 및 JPQL을 사용하여 문서를 읽는 방법을 설명하지만, 기준 빌더 또는 네이티브 쿼리를 사용하여 데이터를 조회 수도 있습니다. 자세히 학습 다음 가이드를 참조하세요.
1개의 문서 반환 예제
쿼리 기준과 일치하는 문서 하나만 조회 하려면 getSingleResult() 메서드를 createQuery() 메서드에 연결합니다. 다음 예시 sample_mflix.movies 컬렉션 에서 title 값이 "Boyhood" 인 문서 하나를 검색합니다.
var singleResult = session.createQuery("from Movie where title = :t", Movie.class) .setParameter("t", "Boyhood") .getSingleResult(); System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
Title: Boyhood, Year: 2014
var singleResult = entityManager.createQuery("select m from Movie m where m.title = :t", Movie.class) .setParameter("t", "Boyhood") .getSingleResult(); System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
Title: Boyhood, Year: 2014
여러 문서 반환 예시
다음 예시 세션에서 createQuery() 메서드를 호출하여 sample_mflix.movies 컬렉션 에서 문서를 조회 . 이 코드는 HQL 및 JPQL을 사용하여 year 값이 1920 인 문서를 반환하고 해당 title 값을 출력합니다.
var results = session.createQuery("from Movie where year = :y", Movie.class) .setParameter("y", 1920) .getResultList(); results.forEach(movie -> System.out.println(movie.getTitle()));
High and Dizzy One Week The Saphead The Daughter of Dawn
var results = entityManager.createQuery("select m from Movie m where m.year = :y", Movie.class) .setParameter("y", 1920) .getResultList(); results.forEach(movie -> System.out.println(movie.getTitle()));
High and Dizzy One Week The Saphead The Daughter of Dawn
문서 수정
다음 작업을 수행하여 컬렉션 의 문서를 수정할 수 있습니다.
문서 하나 업데이트: 엔터티의 setter 메서드를 호출하여 엔터티 인스턴스 한 개의 필드 값을 변경한 다음 세션 또는 엔터티 관리자를 사용하여 변경 사항을 유지합니다.
여러 문서 업데이트:
createQuery()createMutationQuery()세션 또는 엔티티 관리자의 또는 메서드에 업데이트 성명서 전달합니다. 그런 다음executeUpdate()메서드를 호출하여 데이터베이스 에 변경 사항을 적용 .
팁
하나의 예제 업데이트
다음 예시 ObjectId 값으로 문서 검색합니다. 그런 다음 Movie 엔터티의 setTitle() 메서드를 예시 하여 문서의 title 값을 "Jurassic Park I"로 업데이트 .
// Your ObjectId value might differ Movie movieById = session.get(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); movieById.setTitle("Jurassic Park I"); session.persist(movieById);
// Your ObjectId value might differ Movie movieById = entityManager.find(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); movieById.setTitle("Jurassic Park I"); entityManager.persist(movieById);
여러 예제 업데이트
다음 예시 일치하는 문서의 title 값을 "The Three Stooges" 에서 "The 3 Stooges"로 업데이트합니다. 그런 다음 executeUpdate() 예시 를 호출하여 데이터베이스 에 변경 사항을 적용 .
var updateResult = session.createMutationQuery( "update Movie set title = :new where title = :old") .setParameter("new", "The 3 Stooges") .setParameter("old", "The Three Stooges") .executeUpdate(); System.out.println("Number of movies updated: " + updateResult);
Number of movies updated: 2
var updateResult = entityManager.createQuery( "update Movie m set m.title = :new where m.title = :old") .setParameter("new", "The 3 Stooges") .setParameter("old", "The Three Stooges") .executeUpdate(); System.out.println("Number of movies updated: " + updateResult);
Number of movies updated: 2
문서 삭제
다음 작업을 수행하여 컬렉션 에서 문서를 삭제 수 있습니다.
문서 하나 삭제 :
remove()세션 또는 엔터티 관리자에서 메서드를 호출하여 삭제 하려는 엔터티 인스턴스 인수로 전달합니다.여러 문서 삭제:
createQuery()createMutationQuery()세션 또는 엔티티 관리자의 또는 메서드에 삭제 성명서 전달합니다. 그런 다음executeUpdate()메서드를 호출하여 데이터베이스 에 변경 사항을 적용 .
팁
하나의 예시 삭제
다음 예시 ObjectId 값으로 문서 검색합니다. 그런 다음 이 예시 세션에서 remove() 메서드를 호출하여 sample_mflix.movies 컬렉션 에서 해당 문서 삭제 .
// Your ObjectId value might differ Movie movieToDelete = session.get(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); session.remove(movieToDelete);
// Your ObjectId value might differ Movie movieToDelete = entityManager.find(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); entityManager.remove(movieToDelete);
여러 예시 삭제
다음 예시 year 값이 1920 인 모든 문서를 sample_mflix.movies 컬렉션 에서 삭제합니다. 이 예시 삭제 성명서 createMutationQuery() 메서드에 전달한 다음 executeUpdate() 메서드를 호출하여 데이터베이스 에 변경 사항을 적용 .
var deleteResult = session.createMutationQuery( "delete Movie where year = :y") .setParameter("y", 1920) .executeUpdate(); System.out.println("Number of movies deleted: " + deleteResult);
Number of movies deleted: 4
var deleteResult = entityManager.createQuery( "delete Movie m where m.year = :y") .setParameter("y", 1920) .executeUpdate(); System.out.println("Number of movies deleted: " + deleteResult);
Number of movies deleted: 4
추가 정보
최대 절전 모드 ORM을 사용하여 CRUD 작업을 수행하는 방법에 대해 자세히 학습 다음 리소스를 참조하세요.
하이버네이트 ORM사용자 가이드 의 지속성 컨텍스트
최대 절전 모드 ORM 쿼리 가이드 의 문 유형
만들기, 읽기, 업데이트 및 삭제 예제를 더 보려면 시작하기 튜토리얼의 다음 섹션을 참조하세요.
최대 절전 모드 ORM 확장을 사용하여 쿼리를 실행 에 대해 자세히 학습 다음 가이드를 참조하세요.