문제

JPA를 통해 지속될 데이터 모델 (Java EE 6 응용 프로그램에서)을 설계해야하며 JAXB를 통해 직렬화되어야합니다.내가 그랬던 마지막으로, 나는 JAXB 주석이있는 엔티티 클래스의 하나의 그룹이고, JPA 주석이있는 다른 그룹이있었습니다.이것은 두 가지 사이를 번역하기위한 많은 보일러 코드를 가지고 있어야했습니다.나는 그 결합을 생각하고 있으므로 각 클래스가 둘 다 두 가지 주석을 가질 것입니다.나는이 을 알고 있지만, 내 질문은 이 될 것입니다.문제가 발생합니까?

도움이 되었습니까?

해결책

질문은 나에게 대답하기에는 너무 넓습니다. 그러나 jackson jaxb에서 jaxb

내 경우에는 약 3 개의 12 개의 엔티티와 많은 순환 참조가있는 JPA 모델이있었습니다. 엔티티 간의 관계 그래프도 거의 강하게 연결되었습니다. 즉, 엔티티 관계에 따라 다른 모든 엔티티로 거의 모든 엔티티로 이동할 수있었습니다. 내 경우에 설명한대로 엔티티와 Jackson 1.5에서 JPA 엔티티의 JAXB 주석을 오버레이하는 것은 나쁜 아이디어로 밝혀졌습니다.

한 가지, 잭슨 1.5는 순환 참조에 무한 재귀를 밟았습니다. 버그가 아닌 그 운영자 오류를 고려해보십시오. 잭슨은 멋진 소프트웨어입니다. 또한 jackson-235 에 대한 새로운 기능을 제공하는 새로운 기능을 제공한다고 생각합니다. 그래서 이것은 곧 노력할 수도 있습니다!

강력하게 연결된 엔티티의 얼굴에 직렬화 된 컴팩트와 관련된 다른 어려움. 모든 기업 관계를 직렬화하면 비실용적이었습니다. 모든 요청에서 모든 요청에서 모든 엔티티 관계를 완전한 깊이에 따라 순환으로 직렬화 할 수 있습니다.

내 JAXB 객체의 여러 직렬화를 지정하고 의도 된 사용에 따라 적절한 필드와 관계가있는 하나를 선택하고 싶었습니다. 그러나 내가 알고있는 한, Jaxb와 Jackson은 그러한 유연성을 제공하지 않습니다. 그들은 표현을 정의하는 데 상당한 유연성을 제공합니다. 일시적인 것, 목록 모양 등의 방법 등. 그러나 하나의 개체에 대해 여러 표현이 가능하다고 생각하지 않습니다. jaxb 또는 jackson 아래에 여러 표현을 정의하고 런타임에 전환하는 영리한 방법이있을 수 있습니다 ... 그런 일이 존재하는지 알아보십시오. 아마도, 나는 무지하거나 서브 클래스를 사용하여 재생할 수있는 거짓만이기 때문에 이것을위한 특징이 있습니다. 그러나 나는 그것을 발견 할 수 없었기 때문에 궁극적으로 나는 포기하고 DTOS로 갔다

다시, 이것은 모두 모델에 매우 구체적입니다. 어쩌면 이것들은 당신을위한 비 문제가 아닙니다 (또는 이러한 문제에 대한 영리한 솔루션을 가지고있을 수도 있습니다!)

다른 팁

이것은 확실히 수행 될 수 있습니다. 나는 실제로 모델간에 복사하는 코드를 더욱 문제가 있는데 문제가되는 것을 발견합니다.

eclipseLink 는 JPA가 포함 된이 응용 프로그램에 대한 훌륭한 선택입니다 (EclipsElink는 RI TopLink에서 소스를 엽니 다) 및 JAXB 구현.

EclipeLink JAXB (moxy) 에는 JPA 엔티티를 매핑하기위한 여러 확장 기능이 포함되어 있습니다. XML :

자세한 내용은 다음을 참조하십시오.

Datanucleus는 JPA를 RDBMS로 사용하는 지속성을 허용합니다 (장면 뒤의 JDBC 사용) 및 XML (장면 뒤의 JAXB 사용).JAXB Serialization이 수행되는 방식을 정의하는 것으로 JPA 주석을 해석 할 수 있습니다.

을 원한다면 JAXB 주석을 추가 할 수 있습니다.

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