2010-02-03 3 views
14

내 구체적인 클래스는 다양한 방법을 상속되는 추상 슈퍼 클래스의 번호를 가지고에 주석을 추가 할 수 있습니다. 이러한 메소드 중 일부는 JPA 또는 JAXB 주석을 구체적인 클래스에 배치해야합니다. 현재 다음을 통해이 작업을 수행합니다.가장 좋은 방법은 상속 방법

방법을 재정의하지 않고이를 수행 할 방법이 있습니까? 로컬 주석을 제공하기위한 메서드 만 재정의하는 것은 낭비처럼 보입니다.

+0

JPA에서 다른 테이블 이름을 사용하고 JAXB에서 요소 이름을 사용하기 때문에 구체적 하위 클래스에서 주석을 작성해야하는 이유가 추가되었다는 점을 추가하고 싶습니다. 이 경우의 수퍼 클래스도 일반적입니다. – HDave

답변

9

불행하게도, 당신이 지금하고있는 것보다 더 나은 방법이 없습니다. 당신이 당신의 JPA 주석 콘크리트 클래스에 특정 정보가 필요합니다 것을 고려하여 메서드를 재정의해야합니다 묘사하는 일을합니다.

JPA 주석으로

, 당신은 실제로 두 가지 옵션이 있습니다 - 당신은 방법을 주석을 달 수 있습니다, 또는 당신은 속성 주석을 달 수 있습니다. 우리의 프로젝트에 우리는 오히려 방법보다 속성을 주석으로 표준화했지만, 속성은 아마도 구체적인 클래스의 일부로서이, 하나 도움이되지 않습니다. (그들은 어떻게 든 슈퍼 클래스에 공유되는 경우에, 당신은 정말 방법에 주석을해야하고, 그들을 무시합니다).

스키마를 보지 않고서는 추천하기가 어렵지만 엔티티 클래스가 너무 많아 수퍼 클래스에서 많은 속성을 공유하는 경우 - 단순히 동일한 테이블에 저장하거나 차별화 된 유형 열?

또는 이 아니고 인 경우 각 콘크리트 클래스의 공통 속성을 재현해도 될까요? 수퍼 클래스에서 공통 속성을 포착하여 자신을 저장하는 대신 자신이 더 많은 작업을 할 수도 있습니다. 구체적인 클래스에서 개별적으로 주석을 달아야하기 때문에 구체적인 클래스에서 선언해야합니다. 이러한 속성과 상호 작용하는 일반적인 메서드가 필요한 경우 해당 함수를 캡처하는 별도의 유틸리티 클래스가 대답이 될 수 있습니다.

우리 프로젝트에서는 종종 엔티티에 공통의 수퍼 클래스를 사용하지만 엔티티에 대한 일부 메타 데이터를 캡처합니다. 이는 지속성 로직에 영향을주지 않습니다. 따라서 추상 클래스에서 JPA 주석을 사용할 필요가 없습니다 (의미가 없습니다).

+0

응답을 통해 이렇게 생각해 주셔서 감사합니다. 제 경우 엔티티 클래스는 50 % 유사하고 50 %가 다릅니다 !! 성능을 위해 별도의 테이블을 계속 사용하고 위의 방법을 계속 사용합니다. 또한 일반적으로 접근 자 메서드에 주석을다는 경우가 종종 있습니다. – HDave