2010-01-29 2 views
2

저는 작업중인 작은 응용 프로그램에서 JPA를 사용하고 있습니다. 나는 이제 기본적으로 그래프 데이터 구조 객체를 확장하거나 캡슐화하는 데이터 구조를 만들 필요가있다. 그래프를 데이터베이스에 저장해야합니다.JPA를 사용하여 라이브러리 객체 데이터베이스를 영구 보존하려면 어떻게합니까?

내가 직접 작성한 영구 객체의 경우 확장하기가 쉽고 확장 클래스도 쉽게 유지할 수 있습니다. 그러나 이제 JGrahpT 라이브러리에서 그래프와 관련된 객체 라이브러리 (노드, 모서리, 간단한 그래프, 유향 그래프 등)를 사용하고자합니다. 그러나 기본 클래스는 지속 가능한 JPA 객체로 정의되지 않으므로 클래스를 데이터베이스에 저장하는 방법을 모르겠습니다.

나는 몇 가지 아이디어가 있으며 몇 가지 피드백을 보내고 싶습니다.

옵션 1) 나는 기본 클래스의 확장 버전으로 지속성을 추가 진행하면서

가 장식 디자인 패턴을 사용합니다.

도전 :

- 어떻게 올바른 상태로에 필요한 클래스의 private 필드를 유지합니까? 클래스를 확장하여 ID 필드를 추가하고 영구적으로 표시합니까? JPA는 부모 클래스에서 필요한 필드를 어떻게 얻습니까? (루비의 런타임 클래스 수정 같은 것이 굉장합니다.)

- 클래스 계층 구조 (추상 그래프, 지정 그래프, 직접 가중 그래프 등)가 있습니다. 지속성을 얻으려고 확장해도 클래스를 확장해도 여전히 일반 부모 클래스가 없습니다. 어떻게 해결할 수 있습니까? (다시 말하지만, 루비의 런타임 클래스 수정 같은 것이 굉장합니다.)

옵션 2) 전체 코드베이스를 복사하여 복사합니다. JPA와 호환되도록 각 파일의 소스 코드를 수정하십시오.

- 분명이 그렇게 나를 위해 가지고 무엇

나는 다른 옵션이 있습니다 확신 작업

의 많은 ..입니까 ???

답변

3

기본 클래스는 JavaBeans 명명 규칙을 따릅니 까? 그렇다면 JPA의 XML 구문을 사용하여 매핑 할 수 있어야합니다.

이이 규격의 제 10 장에 설명되어 있습니다 : 가에 대한 대안 및 Java 언어 메타 데이터 주석에 대한 최우선 메커니즘 모두 역할에

는 XML 설명을위한 것입니다.

이 XML 파일은 일반적으로 orm.xml이라고합니다. The schema is available online

0

기존 라이브러리로 작업하는 경우 JPA 주석을 사용한 옵션이 매우 제한적으로 보입니다. 하나의 대안은 JPA 대신 Hibernate XML 매핑 파일과 같은 것을 사용하는 것입니다. 클래스 외부에서 매핑을 선언 할 수 있습니다. 프라이빗 필드는 문제가되지 않는다. Hibernate는 리플렉션을 통해 접근 수정 자들을 무시할 것이다. 그러나 이것은 심지어 코드의 내부 논리에 따라 가치가있는 것보다 더 큰 문제가 될 수 있습니다 (예를 들어, Hibernate가 특수 콜렉션과 프록시를 사용하면 클래스가 직접적으로 속성에 액세스하면 더운물에 빠지게됩니다). 내부적으로 getter 메소드).

반면에 '옵션 2'는 많은 작업을 고려해야하는 이유가 아닙니다. ORM 매핑을 만드는 것은 실제로 어떻게 작동하는지에 관계없이 간단하게 처리 할 수있는 작업이 아니며 개인적으로는 옵션 2를 가장 적은 노력으로 생각할 것입니다. 아마 패치 파일로 유지하기를 원할 것입니다. 단지 포크가 아닌 라이브러리에 대한 업데이트를 유지할 수 있습니다.

관련 문제