ORM은 내부적으로 어떻게 작동하나요?또한 Java에서 영구 객체를 갖는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1231295

  •  22-07-2019
  •  | 
  •  

문제

ORM은 어떻게 작동하나요?객체가 BLOB으로 직렬화되어 있습니까?

Java에서는 JDO가 여전히 이를 위한 방법입니까?그 밖의 무엇이 이용 가능합니까?EJB, Direct Object Serialization, JDO에 대한 이야기가 많았던 것 같습니다.

도움이 되었습니까?

해결책

첫 번째 질문에 답하기 위해 다음은 추출물입니다. 최대 절전 모드, ORM을 구현하는 다양한 방법이 있다고 말합니다.

순수한 관계

사용자 인터페이스를 포함한 전체 응용 프로그램은 관계형 모델 및 SQL 기반 관계형 작업을 중심으로 설계되었습니다. 이 접근법은 대형 시스템에 대한 결함에도 불구하고 낮은 수준의 코드 재사용이 견딜 수있는 간단한 응용 프로그램에 대한 훌륭한 솔루션이 될 수 있습니다. 직접 SQL은 모든 측면에서 미세 조정할 수 있지만, 이식성 부족 및 유지 관리 가능성과 같은 단점은 특히 장기적으로 중요합니다. 이 범주의 응용 프로그램은 종종 저장된 절차를 많이 사용하여 일부 작업을 비즈니스 계층에서 데이터베이스로 이동시킵니다.

가벼운 물체 매핑

엔티티는 관계형 테이블에 수동으로 매핑되는 클래스로 표시됩니다. 손으로 코딩 된 SQL/JDBC는 잘 알려진 디자인 패턴을 사용하여 비즈니스 로직에서 숨겨져 있습니다. 이 접근법은 매우 널리 퍼져 있으며 소수의 엔티티 또는 일반적인 메타 데이터 중심 데이터 모델이있는 응용 프로그램에 성공적입니다. 저장된 절차에는 이러한 종류의 응용 프로그램에 자리가있을 수 있습니다.

중간 객체 매핑

응용 프로그램은 객체 모델을 중심으로 설계되었습니다. SQL은 빌드 시간에 코드 생성 도구를 사용하여 또는 프레임 워크 코드별로 런타임에 생성됩니다. 객체 간의 연관성은 지속 메커니즘에 의해 지원되며 쿼리는 객체 지향 표현식 언어를 사용하여 지정 될 수 있습니다. 물체는 지속성 층으로 캐시됩니다. 많은 ORM 제품과 자체로 만든 지속성 계층은 최소한 이러한 수준의 기능을 지원합니다. 특히 다른 데이터베이스 제품 간의 휴대 성이 중요 할 때 일부 복잡한 트랜잭션이있는 중간 크기의 응용 프로그램에 적합합니다. 이러한 응용 프로그램은 일반적으로 저장된 절차를 사용하지 않습니다.

전체 객체 매핑

전체 객체 매핑은 구성, 상속, 다형성 및 "도달성에 의한 지속성"과 같은 정교한 객체 모델링을 지원합니다. 지속성 층은 투명한 지속성을 구현합니다. 영구 클래스는 특별 기본 클래스를 상속하지 않거나 특수 인터페이스를 구현해야합니다. 효율적인 페치 전략 (게으르고 열심 인 페치) 및 캐싱 전략은 응용 프로그램에 투명하게 구현됩니다. 이 수준의 기능은 자체로 만든 지속성 계층으로 달성 할 수 없습니다. 이는 몇 달 또는 수년의 개발 시간에 해당합니다. 다수의 상업용 및 오픈 소스 Java ORM 도구가 이러한 수준의 품질을 달성했습니다. 이 수준은이 책에서 우리가 사용하고있는 ORM의 정의를 충족합니다. 전체 객체 매핑을 달성하는 도구로 해결할 것으로 예상되는 문제를 살펴 보겠습니다.

다른 팁

ORM = 객체 관계형 매핑(Object Relational Mapping), 객체의 속성이 관계형 데이터베이스의 열에 매핑됩니다.해당 매핑은 임의적이므로 blob에 수행할 수 있습니다. 실제로 가장 유용한 것은 문자열을 Varchar로, int를 정수로 등 자연 매핑하는 경향이 있습니다.

JPA는 ORM의 표준을 찾는 곳입니다.JPA는 번거로운 것으로 알려진 EJB CMP 접근 방식을 대체합니다.JPA를 사용하면 매핑을 Java 주석으로 표현할 수 있으며 여러 데이터베이스를 지원할 때 구성 파일에 매핑을 지정할 수도 있습니다. 후자가 유용할 수 있습니다.

JPA에는 객체 속성에 대한 쿼리를 생성할 수 있는 쿼리 언어가 있습니다.

JPA는 주요 App Server 공급업체 및 Hibernate와 같은 제품에서도 지원됩니다.

저는 EJB CMP보다 JPA를 사용하기가 꽤 좋다고 생각했습니다.

나는 트랜잭션 관리와 보안을 위해 EJB Session Beans 파사드를 계속 사용할 것을 권장합니다. 주석 기반 접근 방식은 EJB 3을 방법 EJB 2보다 사용하기 쉽고 코딩 오버헤드가 최소화됩니다.

JDO는 실제로 표준 ORM이며 JPA (1 + 2)보다 더 완전한 사양을 제공합니다. JPQL은 RDBMS 개념에 더 중점을 두므로 SQL을 모방합니다. JDOQL은 Java 구문을 따르므로 더 많은 객체 기반입니다. 앱이 RDBMS에서 벗어나는 것으로 간주되는지 여부에 따라 다릅니다. 그렇다면 JPA는 갈 길이 아닙니다. 그것이 RDBMS에만 해당된다면 JPA는 확실히 고려 사항입니다.

객체가 멍청이로 직렬화되는지 여부는 구성에 따라 다릅니다. 원하는 경우 복잡한 객체 유형에 대해 그렇게 할 수 있지만 쿼리 가능하지는 않습니다. 대신 기본 형태로 지속되면 쿼리하여보다 효율적인 앱으로 이어질 수 있습니다.

-Andy (Datanucleus -JDO 및 JPA 지속성)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top