JPA 란 무엇입니까? 소개 Java Persistence API

사양으로,Java Persistence API 는 우려와 함께 지속성 느슨하게 어떤 의미하는 메커니즘 Java 개체보다 오래 살아야 응용 프로그램 과정을 다시 불러오는 것이 가능합니다. 모든 Java 객체가 지속 될 필요는 없지만 대부분의 응용 프로그램은 주요 비즈니스 객체를 유지합니다. JPA 사양을 정의할 수 있는 개체를 유지되고,얼마나 그 개체를 유지에 사용할 수 있습니다.

그 자체로 JPA 는 도구 나 프레임 워크가 아닙니다; 오히려 모든 도구 또는 프레임 워크에 의해 구현 될 수있는 개념 집합을 정의합니다. JPA 의 orm(object-relational mapping)모델은 원래 Hibernate 를 기반으로했지만 이후 진화했습니다. 마찬가지로 jpa 는 원래 관계형/SQL 데이터베이스와 함께 사용하기위한 것이지만 일부 JPA 구현은 NoSQL 데이터 스토어와 함께 사용하도록 확장되었습니다. NoSQL 을 사용하여 JPA 를 지원하는 인기있는 프레임 워크는 Jpa2.2 의 참조 구현 인 EclipseLink 입니다.

JPA 와 Hibernate

서로 얽혀있는 역사 때문에 Hibernate 와 JPA 가 자주 결합됩니다. 그러나 Java 서블릿 사양과 마찬가지로 JPA 는 많은 호환 가능한 도구와 프레임 워크를 생성했으며 Hibernate 는 그 중 하나 일뿐입니다.

개빈 킹(Gavin King)이 개발했으며 2002 년 초에 출시 된 Hibernate 는 Java 용 ORM 라이브러리입니다. 킹은 지속성을 위해 엔티티 콩의 대안으로 최대 절전 모드를 개발했습니다. 프레임 워크는 너무 대중적이었고 당시에는 필요했기 때문에 많은 아이디어가 첫 번째 JPA 사양에서 채택되고 성문화되었습니다.

오늘날 Hibernate ORM 은 가장 성숙한 JPA 구현 중 하나이며 Java 에서 ORM 에 여전히 인기있는 옵션입니다. 최대 절전 모드 ORM5.3.8(이 글을 쓰는 현재 버전)은 JPA2.2 를 구현합니다. 또한,최대 절전 모드의 가족을 만들어 나가고 있습니다 포함하도록 확장 인기 있는 도구들 같이 최대 절전 모드 검색,최대 절전 모드 검사기,최대 절전 모드 OGM 을 지원하는 도메인 모델의 지속성에 대한 NoSQL.

Java ORM 이란 무엇입니까?

실행이 다르지만 모든 JPA 구현은 일종의 ORM 계층을 제공합니다. JPA 와 JPA 호환 도구를 이해하기 위해서는 ORM 에 대해 잘 파악해야합니다.

객체-관계형 매핑은 개발자가 수동으로 수행하는 것을 피할 수있는 좋은 이유가있는 작업 중 하나입니다. Hibernate ORM 또는 EclipseLink 와 같은 프레임 워크는 해당 작업을 라이브러리 또는 프레임 워크 인 ORM 계층으로 성문화합니다. 응용 프로그램의 일부로,리 ORM 층에 관한 관리책임의 변환 소프트웨어 개체와 상호 작용하는 테이블과 열에 관계형 데이터베이스입니다. Java 에서 ORM 계층은 Java 클래스와 객체를 변환하여 관계형 데이터베이스에 저장하고 관리 할 수 있도록합니다.

기본적으로 지속되는 객체의 이름은 테이블의 이름이되고 필드는 열이됩니다. 테이블이 설정되면 각 테이블 행은 응용 프로그램의 개체에 해당합니다. 객체 매핑은 구성 가능하지만 기본값은 잘 작동하는 경향이 있습니다.

그림 1 은 애플리케이션 개발에서 JPA 와 ORM 계층의 역할을 보여줍니다.

JavaWorld/IDG

그림 1. JPA 및 ORM 층

구성 Java ORM 층

설정할 때까지는 새로운 프로젝트를 사용하 JPA 해야 합을 구성하는 데이터 저장소 및 JPA 공급자입니다. 선택한 데이터베이스(SQL 또는 NoSQL)에 연결하도록 데이터 저장소 커넥터를 구성합니다. 또한 Hibernate 또는 EclipseLink 와 같은 프레임 워크 인 JPA 공급자를 포함하고 구성 할 것입니다. Jpa 를 수동으로 구성 할 수는 있지만 많은 개발자는 Spring 의 out-of-the-box 지원을 사용하도록 선택합니다. 보”JPA 설치 및 설정”아래에 대한 시범의 수동 및 봄 기반 JPA 설치 및 설정할 수 있습니다.

Java 의 데이터 지속성

프로그래밍 관점에서 ORM 레이어는 어댑터 레이어입니다: 객체 그래프의 언어를 SQL 및 관계형 테이블의 언어에 적응시킵니다. ORM 계층은 객체 지향 개발자가 객체 지향 패러다임을 벗어나지 않고 데이터를 지속시키는 소프트웨어를 구축 할 수있게합니다.

JPA 를 사용할 때 데이터 저장소에서 응용 프로그램의 데이터 모델 객체로 맵을 만듭니다. 객체가 저장되고 검색되는 방법을 정의하는 대신 객체와 데이터베이스 간의 매핑을 정의한 다음 JPA 를 호출하여 계속 유지합니다. 관계형 데이터베이스를 사용하는 경우 응용 프로그램 코드와 데이터베이스 간의 실제 연결의 대부분은 Java 데이터베이스 연결 API 인 JDBC 에 의해 처리됩니다.

스펙으로 JPA 는 메타데이터 주석을 제공하며,이 주석을 사용하여 객체와 데이터베이스 간의 매핑을 정의합니다. 각 JPA 구현은 JPA 주석에 대한 자체 엔진을 제공합니다. JPA 사양도 제공합PersistanceManagerEntityManager있는 키트와 접촉 JPA 시스템(상기에서 당신의 사업 논리의 코드를 알려주는 시스템과 함께 무엇을 매핑합체).

이 모든 것을보다 구체적으로하려면 뮤지션을 모델링하기위한 간단한 데이터 클래스 인 목록 1 을 고려하십시오.

목록 1. Java 의 간단한 데이터 클래스

목록 1 의MusicianmainInstrumentperformances.

Musician의 이유는 데이터를 포함하는 것입니다. 이 유형의 클래스는 때때로 DTO 또는 데이터 전송 객체라고도합니다. Dto 는 소프트웨어 개발의 일반적인 기능입니다. 그들은 많은 종류의 데이터를 보유하고 있지만 비즈니스 로직은 포함하지 않습니다. 데이터 객체를 지속하는 것은 소프트웨어 개발에있어 유비쿼터스 과제입니다.

데이터와 함께 지속성 JDBC

을 절약할 수 있는 방법 중 하나의 인스턴스Musician등 관계형 데이터베이스에 사용하는 것입니다.JDBC 라이브러리입니다. JDBC 는 응용 프로그램이 기본 데이터베이스 구현에 대해 생각하지 않고 SQL 명령을 발행 할 수있는 추상화 계층입니다.

목록 2 는 JDBC 를 사용하여Musician클래스를 유지할 수있는 방법을 보여줍니다.

목록 2. Jdbc 레코드 삽입

목록 2 의 코드는 상당히 자체 문서화되어 있습니다. georgeHarrison객체는 어디에서나 올 수 있습니다(프런트 엔드 제출,외부 서비스 등ID 및 이름 필드가 설정되어 있습니다. 그런 다음 개체의 필드는 SQLinsertPreparedStatement클래스는 JDBC 의 일부이며 sql 쿼리에 값을 안전하게 적용하는 방법을 제공합니다.)

jdbc 는 수동 구성과 함께 제공되는 제어를 허용하지만 JPA 에 비해 번거 롭습니다. 데이터베이스를 수정하려면 먼저 Java 개체에서 관계형 데이터베이스의 테이블로 매핑되는 SQL 쿼리를 만들어야합니다. 그런 다음 객체 서명이 변경 될 때마다 SQL 을 수정해야합니다. JDBC 를 사용하면 SQL 을 유지하는 것이 그 자체로 작업이됩니다.

Jpa 를 사용한 데이터 지속성

이제 JPA 를 사용하여Musician클래스를 유지하는 목록 3 을 고려하십시오.

목록 3. 지속하고 조지와 해리슨 JPA

Musician georgeHarrison = new Musician(0, "George Harrison");musicianManager.save(georgeHarrison);

목록 3 대체 SQL 설명서 목록에서 2 단일 라인session.save()지시 JPA 을 유지한다. 그때부터 sql 변환은 프레임 워크에 의해 처리되므로 객체 지향 패러다임을 벗어날 필요가 없습니다.

Jpa 의 메타 데이터 주석

목록 3 의 마법은 jpa 의 주석을 사용하여 생성 된 구성의 결과입니다. 개발자는 주석을 사용하여 jpa 에 어떤 객체가 지속되어야하는지,어떻게 지속되어야 하는지를 알려줍니다.

목록 4 는 단일 JPA 주석이있는Musician클래스를 보여줍니다.

목록 4. JPA 의@Entity annotation

@Entitypublic class Musician { // ..class body}

영구 객체는 엔티티라고도합니다. 를 연결하는@EntityMusician알 JPA 는 이 클래스 및 객체해야 유지됩니다.

구성 JPA

좋아하는 가장 현대적인 프레임워크 JPA 용하여 코딩칙(으로도 알려진 국어),에서는 프레임워크를 제공합의 기본 구성에 따라 업계 모범 사례를 설명합니다. 한 예로Musician라는 클래스는 기본적으로 Musician 이라는 데이터베이스 테이블에 매핑됩니다.

기존의 구성은 타임 세이버이며,많은 경우에 충분히 잘 작동합니다. JPA 구성을 사용자 정의하는 것도 가능합니다. 예를 들어,사용할 수 있습 JPA 의@TableMusician야 저장됩니다.

목록 5. JPA 의 테이블 주석

@Entity@Table(name="musician")public class Musician { // ..class body}

나열 5JPA 지속 entity(Musicianmusician테이블.

기본 키

에 JPA,기본 키가 필드를 고유하게 식별하는 데 사용되는 각 개체 데이터베이스에서. 기본 키는 객체를 참조하고 다른 엔티티와 관련시키는 데 유용합니다. 테이블에 개체를 저장할 때마다 기본 키로 사용할 필드도 지정합니다.

목록 6 에서 JPA 에Musician의 기본 키로 사용할 필드를 알려줍니다.

목록 6. 지정하면 기본 키

@Entitypublic class Musician { @Id private Long id;

이 경우에,우리는 우리 JPA 의@IdidMusician‘s primary key. 기본적으로,이 구성 가정 기본키를 설정하여 데이터베이스–예를 들어,이 필드를 설정하면 자동 증분 테이블에 있습니다.

JPA 는 객체의 기본 키를 생성하기위한 다른 전략을 지원합니다. 또한 개별 필드 이름을 변경하기위한 주석이 있습니다. 일반적으로 JPA 는 필요할 수있는 지속성 매핑에 적응할 수있을만큼 유연합니다.

CRUD 작업

한 번에 매핑하는 클래스는 데이터베이스 테이블을 설립의 기본 키우기 위해 필요한 모든 것을 갖추고 있을 만들고,검색,삭제하고,업데이트 해당 클래스에서는 데이터베이스입니다. 전화session.save()을 만들 것입 업데이트하거나 지정된 클래스는지 여부에 따라본-키 필드 null 또는 적용을 en 기존 entity. entityManager.remove()를 호출하면 지정된 클래스가 삭제됩니다.

Entity 관계에서 JPA

단순히 유지하고 개체의 기본 분야는 유일한 방법. JPA 는 또한 서로 관련하여 엔티티를 관리 할 수있는 기능을 가지고 있습니다. 테이블과 객체 모두에서 네 가지 종류의 엔티티 관계가 가능합니다:

    1. One-to-One

의 각 유형에 관계하는 방법에 대해 설명합 엔티티에 관한 것입니다. 예를 들어,MusicianPerformanceListSet.

경우에는MusicianBandMusicians 에서 하나의Band클래스입니다. (각 음악가가 단일 밴드에서만 공연한다고 가정합니다.)

경우MusicianBandMatesMusicianentities.

마지막으로MusicianQuoteQuote famousQuote = new Quote().

관계 유형 정의

JPA 에는 각 관계 매핑 유형에 대한 주석이 있습니다. 목록 7 은MusicianPerformances 사이의 일대 다 관계에 주석을 달 수있는 방법을 보여줍니다.

목록 7. 주석을 한 관계

한 것을 알 수 있는@JoinColumn알 JPA 어떤 열 성능에 테이블을 지도하는Musicianentity. 각 성능은이 열에 의해 추적되는 단일Musician에 연결됩니다. 때 JPA 로드MusicianPerformance데이터베이스로,그것은 이 정보를 사용하여 재구성하기 위하여 개체 그래프.

가져오는 전략을 JPA

외에도 배치할 위치를 알고 관련 엔티티 데이터베이스에서,JPA 는 방법을 알고 있어야 당신이 그들이 원하는 로드됩니다. 가져 오기 전략은 JPA 에 관련 엔터티를로드하는 방법을 알려줍니다. 객체를로드하고 저장할 때 jpa 프레임 워크는 객체 그래프가 처리되는 방법을 마무리 할 수있는 기능을 제공해야합니다. 예를 들어,MusicianbandMategeorge발생할 수 있습 전체 음악가 테이블에 데이터베이스!

필요한 것은을 정의하는 기능으로드의 관련 엔–을 인식하는 것을 물론,관계에서 JPA 수 있습 망 또는 게으르다. 당신이 사용할 수 있는 주석을 사용자 정의 가져오는 전략지만,JPA 의 기본 구성은 상자에,변경하지 않고

  1. 일:Lazy
  2. 일:열망
  3. 있:Lazy
  4. One-to-One: 열심

JPA 설치 및 설정

우리는 것으로 결론 빠른 모습에서 설치 및 설정 JPA 에 대한 매핑을 사용할 수 있습니다. 이 데모에서는 Jpa 참조 구현 인 EclipseLink 를 사용합니다.

JPA 를 설치하는 일반적인 방법은 프로젝트에 JPA 공급자를 포함하는 것입니다. 목록 8 은 Mavenpom.xml파일에 EclipseLink 를 종속성으로 포함하는 방법을 보여줍니다.

목록 8. EclipseLink 를 Maven 종속성으로 포함

org.eclipse.persistenceeclipselink2.5.0-RC1

목록 9 와 같이 데이터베이스의 드라이버를 포함해야합니다.

목록 9. MySql 커넥터에 대한 maven 종속성

mysqlmysql-connector-java5.1.32

다음으로 데이터베이스 및 공급자에 대해 시스템에 알려야합니다. 이 작업은 목록 10 과 같이persistence.xml파일에서 수행됩니다.

목록 10. 지속성.xml

프로그래밍 방식을 포함하여 시스템에이 정보를 제공하는 다른 방법이 있습니다. 내가 사용하는 것이 좋습니다persistence.xml파일이기 때문에 저장하는 종속성 이 방법 매우 쉽게 업데이트 응용 프로그램을 수정하지 않고 코드입니다.

Jpa 용 스프링 구성

Spring 을 사용하면 JPA 를 응용 프로그램에 통합 할 수 있습니다. 예를 들어,배치하는@SpringBootApplicationannotation 응용 프로그램에서 헤더 지시한 봄을 자동으로 검색에 대한 수업과 주입한EntityManager에서 다음과 같이 필요에 따라 구성을 지정합니다.

목록 11 은 응용 프로그램에 대한 Spring 의 JPA 지원을 원할 경우 포함 할 종속성을 보여줍니다.

목록 11. 추가 봄 JPA 지원 Maven

결론

모든 응용 프로그램과 거래하는 데이터베이스 응용 프로그램을 정의 층에 그 목적을 격리하려는 지속성 코드입니다. 이 기사에서 살펴본 바와 같이 Java Persistence API 는 Java 객체 지속성에 대한 다양한 기능과 지원을 소개합니다. 간단한 응용 프로그램을 필요로하지 않을 수 있습의 모든 JPA 의 기능,그리고 일부 경우에는 오버헤드를 구성하는 프레임워크되지 않을 수 있습 만했다. 그러나 응용 프로그램이 성장함에 따라 JPA 의 구조와 캡슐화는 실제로 keep 을 얻습니다. JPA 를 사용하면 객체 코드를 간단하게 유지하고 Java 응용 프로그램의 데이터에 액세스하기위한 기존 프레임 워크를 제공합니다.

Java 지속성 API 및 관련 기술에 대해 자세히 알아보기

  • JDBC 란 무엇입니까? Java 데이터베이스 연결 소개:데이터베이스에 연결,SQL 쿼리 발행 등을위한 Java 의 저수준 API 를 알 수 있습니다.
  • Jpa 및 Hibernate 를 사용한 Java 지속성,1 부:엔티티 및 관계:Java8 및 Hibernate ORM 과의 엔티티 및 관계 모델링을 시작하십시오.
  • Jpa 및 최대 절전 모드를 사용한 Java 지속성,2 부: Java8 및 Hibernate ORM 에서 다 대다 관계 및 상속 관계를 모델링하는 실습 실습.
  • 상태 종속 동작 구현:Java 의 상태 패턴 및 상태 종속성에 대한 고전적인 소개입니다.
  • 최대 절전 모드에서 열망/게으른 로딩:최대 절전 모드에서 열망 및 게으른 로딩을 적용하는 방법.
  • JPA2.2 를 제공 높은 기대되는 변경사항:개요한 사양에서 업데이트 JPA2.2 개선 사항을 포함 CDI,더 나은 맞춤 날짜와 시간 API,과에 대한 지원@Repeatable할 수 있습니다.
  • 다음 프로젝트에 JPA 를 사용해야합니까?:당신이 결정하는 데 도움이 될 수있는 주요 질문.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다