Docs Menu
Docs Home
/ /

CRUD 작업 수행하기

이 가이드 에서는 최대 절전 모드 ORM용 MongoDB 확장을 사용하여 MongoDB 컬렉션에서 생성, 읽기, 업데이트 및 삭제 (CRUD ) 작업을 실행 방법을 학습 수 있습니다.

Movie 가이드 의 sample_mflix.movies 예제에서는 Atlas 샘플 데이터 세트의 컬렉션 나타내는 엔터티를 사용합니다. Movie 엔터티의 정의는 다음과 같습니다.

import com.mongodb.hibernate.annotations.ObjectIdGenerator;
import org.bson.types.ObjectId;
import java.util.List;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
private ObjectId id;
private String title;
private String plot;
private int year;
private List<String> cast;
public Movie(String title, String plot, int year, List<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 List<String> getCast() {
return cast;
}
public void setCast(List<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();

세션을 사용하려면 SessionFactory를 구성하는 HibernateUtil.java 파일 만들어야 합니다. 자세히 학습 시작하기 튜토리얼의 애플리케이션 구성 단계를 참조하세요.

// 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;

EntityManager를 사용하려면 지속성 단위를 선언하는 persistence.xml 파일 만들어야 합니다. 자세히 학습 하이버네이트 ORM 문서에서 JPA 표준 API를 사용하는 튜토리얼 을 참조하세요.

다음 메서드에 엔터티 인스턴스 전달하여 문서 생성하면 해당 문서 가 컬렉션 에 삽입됩니다.

  • org.hibernate.Session.persist(): 최대 절전 모드 API 사용하여 데이터베이스 에 변경 사항 적용

  • jakarta.persistence.EntityManager.persist(): 자카르타 지속성 API 사용하여 데이터베이스 에 변경 사항 적용

엔터티 인스턴스를 생성하고 이를 데이터베이스에 유지하는 방법에 대해 자세히 학습하려면 하이버네이트 ORM 사용자 가이드에서 엔터티를 영구화하기 를 참조하세요.

다음 예시 새 Movie 엔터티 인스턴스 만들고 persist() 메서드를 사용하여 해당 문서 sample_mflix.movies 컬렉션 에 삽입합니다.

var myMovie = new Movie();
myMovie.setTitle("Knives Out");
myMovie.setYear(2019);
myMovie.setCast(List.of("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(List.of("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() 메서드를 제공합니다.

  • 하이버네이트의 Session API: 하이버네이트 쿼리 언어(HQL) 구문을 사용하여 쿼리 정의하기

  • 자카르타 퍼시스턴스의 EntityManager API: HQL의 하위 집합인 자카르타 퍼시스턴스 쿼리 언어(JPQL) 구문을 사용하여 쿼리를 정의합니다.

HQL 및 JPQL 구문을 사용하여 데이터를 검색하는 방법에 대해 자세히 학습하려면 하이버네이트 ORM 쿼리 가이드에서 문 선택 을 참조하세요.

참고

이 섹션에서는 HQL 및 JPQL을 사용하여 문서를 읽는 방법을 설명하지만, 기준 빌더 또는 네이티브 쿼리를 사용하여 데이터를 조회 할 수도 있습니다. 자세히 학습 다음 가이드를 참조하세요.

쿼리 기준과 일치하는 문서 하나만 조회 하려면 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

쿼리 구문

HQL 및 JPQL 구문에 대해 자세히 학습하려면 하이버네이트 ORM 문서의 하이버네이트 쿼리 언어 가이드 를 참조하세요.

다음 예시 세션에서 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() 메서드를 호출하여 데이터베이스 에 변경 사항을 적용 .

최대 절전 모드 ORM을 사용하여 데이터를 수정하는 방법에 대해 자세히 학습 다음 리소스를 참조하세요.

  • 최대 절전 모드 ORM 사용자 가이드 의 managed/영구 상태 수정하기

  • 최대 절전 모드 ORM 쿼리 가이드 의 업데이트 성명서

다음 예시 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() 메서드를 호출하여 데이터베이스 에 변경 사항을 적용 .

최대 절전 모드 ORM을 사용하여 데이터를 삭제하는 방법에 대해 자세히 학습 다음 리소스를 참조하세요.

다음 예시 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 확장을 사용하여 쿼리를 실행 방법에 대해 자세히 학습 다음 가이드를 참조하세요.

돌아가기

엔터티

이 페이지의 내용