2010-12-02 2 views
1

지난 몇 개월/주 동안 나는 Hibernate와 JPA 매핑을 많이 해왔다. 내 DB는 복합 기본 키를 사용하며 약 10-15 개의 Hibernate 및 5-10 개의 EclipseLink 버그를보고했습니다. Hibernate는 작동해야하는 어떤 별자리에서 특히 우습다.JPA/Hibernate : 모든 JPA 매핑이 올바르지 않은 경우 ORM (Hibernate)은 어떤 용도로 사용됩니까?

큰 문제는 (내가 전문가와 JPA 책의 저자에 의해 확인 코드를했다) :

무슨 소용이 모든 JPA 매핑을 제대로하지 않는 ORM은?

하이버 네이트는 많은 것을 제공하고 etcetc를 캐싱해야한다. 개발자가 과거에 작동하는 메타 데이터 모델을 만들 수 없을 때 누가 신경을 쓰는지 궁금합니다 ... 모두 무의미합니다. 다시 말하지만 ORM이 사용되지 않을 때 사용하는 것은 무엇입니까 모두 JPA 매핑이 맞습니까?

+0

여러 프로젝트에서 4 년 동안 최대 절전 모드를 사용해 왔지만 중요한 문제가 없었습니다. 그래서 문제는 당신이되어야합니다;) – Bozho

+0

Hibernate와 EclipseLink에서 JPA 1.0 @IdClass, JPA 1.0 @EmbeddedId, JPA 2.0 @IdClass 및 JPA 2.0 @EmbeddedId를 사용하여 광범위한 복합 테스트를 수행 했으므로 문제는 절대로 Hibernate가 복합 키를 잘못 처리하는 것입니다. 복합 기본 키를 사용하지 않거나 JPA 1.0 @IdClass 구현을 사용 중입니다.이것들은 Hibernate (3.6)에서 안정적인 유일한 것들이다. – Kawu

+0

이것은 불꽃 발톱입니다. "네, 맞습니다! JPA 2 전체 스펙을 구현하지 않은 ORM은 쓸모가 없습니다." Hibernate에 대한 당신의 좌절감을 풀어주고 다른 사람들이 안심할 수 있기를 바랍니다. SO는 이러한 종류의 의사 소통을위한 적절한 장소가 아닙니다. – paprika

답변

5

ORM은 도구입니다. 그 문장을 깊게 숙고해라.

이 기술의 경우 Hibernate가 특정 도메인에서 충분히 인기가있는 경우, 그것은 은색 글 머리 기호이며 사용해야 할 필요가 있다고 생각합니다. 그렇지 않으면 당신은 패자입니다.

이것은 분명하고 완전히 잘못되었습니다. Hibernate는 적절하게 사용해야하는 도구입니다.

Hibernate의 저자는 매핑이 xml이나 주석을 사용하여 정의 된 새로운 프로젝트에 가장 적합하다고 말하고, Hibernate는 데이터베이스를위한 DLL을 생성하고 모든 테이블과 관계를 생성한다.

역순으로 처리 할 수 ​​있습니다. 특히 정규화되지 않은 테이블과 복합 기본 키가있는 경우에는 그 반대입니다.

그래서 Hibernate는 자동 증가하는 주요 사로 게이트 키의 사용을 강력히 권장한다.

올바른 JPA 역 매핑은 많은 구석이 야생에서 기다리고있는 문제이므로 모든 버그를보고하여 올바른 작업을 수행 할 수 있습니다. 좀 더 끈기가 있으면, 당신은 완벽하게 매핑을 할 수있을 것이라고 확신합니다. 그리고 그 이후의 모든 것이 훨씬 쉬울 것입니다. 첫 부분은 항상 가장 어렵 기 때문입니다.

+0

대리 키를 사용하는 것이 좋습니다. 복합 키 매핑을 올바르게 가져 오는 데 문제가 있다는 암시를줍니다. JPA 1.0 및 JPA 2.0과 @IdClass 및 @EmbeddedId 복합 키 클래스 매핑을 사용하여 지난 두 주 동안 광범위한 테스트를 수행했습니다. 결과 : Hibernate는 JPA 1.0 @IdClass를 관리하지만, EclipseLink는 4 가지 중 3 가지 (JPA 1.0 @IdClass, JPA 1.0 @ ExmbeddedId 및 JPA 2.0 @IdClass)를 관리하므로 Hibernate는 거의 쓸모 없으며 극도로 개발자를 비우호하게 만듭니다 (하드 진짜 원인을 디버깅하는 것), 궁극적으로 Hibernate를 시장에서 단지 두 번째 선택으로 만든다. – Kawu

+0

ORM 도구가 열악하기 때문에 DB를 바꾸지는 않겠지 만 더 잘 작동하는 버그로 전환하거나 버그를 수정하지 않을 것입니다. 포럼에서 EclipseLink 개발자가 버그 리포트를 작성하라고 촉구하는 경우가 있습니다. Hibernate에서 이런 일은 결코 일어나지 않았으므로 Hibernate 개발자가 다른 것들에 대해 작업한다는 느낌을 갖습니다. 프론트 사이드 (매핑!)가 만족스럽게 작동하지 않을 때 소프트웨어의 뒷면 부분을 향상시키는 것이 꽤 어리 석다는 생각이 들었습니다. – Kawu

+0

@ 카우 : 아마도 Hibernate 개발자는 버그를 만들 것을 촉구하는 대신 Hibernate를 개선하고 수정하는 중이었습니다. 보고서. – darioo

3

JPA와 관련된 모든 문제점을 해결하기 위해 모든 구현에 대한 테스트 케이스를 작성하고 ORM의 동작과 해당 커뮤니티의 반응을 비교합니다. Hibernate는 훨씬 최악이다 - 그들의 JPA 버그는 심지어 보지 않는다. OpenJPA는 EclipseLink의 기능에 다소 뒤지지 만 안정적으로 보입니다. EclipseLink에는 아직 시간이 걸리는 버그가 있지만 활동과 잦은 업그레이드가 있습니다. 메일 링리스트에있는 나의 질문은 모두 오라클 사람들이 전문적으로 대답했습니다. 현재 EclipseLink가 승자입니다. 나는 복합 기본 키를 문제없이 사용하고있다 - 그것들 없이는 여전히 2 차 고유 인덱스가 필요할 것이다. 대리 키 해결 방법이 나에게 변명 인 것처럼 복합 키를 사용하여 엔티티를 조회하는 것이 정말 유용합니다. EclipseLink에서 열거 형을 기본 키로 사용할 수도 있습니다.이 열거 형은 시스템 동작을 제어하는 ​​수많은 작은 조회 테이블에 실제로 유용합니다. http://opensource.atlassian.com/projects/hibernate/browse/JPA-7

+0

의견을 보내 주셔서 감사합니다. Hibernate에서 ENUM PK 문제를 언급 해 주셔서 대단히 기쁩니다. 다음 번 DB 확장 중 하나에서 테이블 중 하나에 대해 만들었을 것입니다. – Kawu

+0

업데이트 : 최대 절전 모드에서 "ENUM없이 PK 문제"해결 될 것으로 보입니다. 방금 Hibernate 3.6.0을 사용해 보았습니다. em.find (...)를 사용하여 복합 PK에 ENUM이있는 엔티티를 찾는 데 아무런 문제가 없습니다. – Kawu

관련 문제