그래서 저는 JPA의 상속 기능에 익숙해지기 위해 노력해 왔으며 지금까지 정말 좋아했습니다. 최근에 저에게 일어난 한 가지는 데이터를 검색하는 것 이외의 다른 용도로 실제로 사용될 수 있다는 것입니다. discriminator 값을 기반으로 하위 클래스를 가져올 수 있으므로 상속은 실제로 구성 필드를 구현으로 변환하는 편리한 방법입니다. 지식과 경험의 비율이 '위험 할 정도로 충분할 때/항상 그 영역을 인식 할만큼 충분하지 않은'단계에 있기 때문에 이것이 좋은 생각인지 묻는 것이 가장 좋을 것이라고 생각했습니다.JPA 상속을 다른 메소드 구현 방법으로 사용하는 것이 이치에 맞습니까?
PRODUCT 및 BILLTYPE 테이블을 예로 들어 보겠습니다.
Product:
int Id
int billtypeid
Billtype:
int id
varchar[15] description
Billtype는 단순히 제품에 대한 청구 전략 (우리는 다른 사람이 단지의 경우에 의해 청구 할 수 있지만 일부 주문은, 중량 청구 할 수있다 말할 것이다). 각 청구서 유형은 인보이스 발행 과정에서 다른 방법을 사용해야합니다. Billtype 테이블에는 항목이 몇 개있을뿐 아니라 매우 커질 수 없습니다.
인보이스 코드에 필요한 메소드에 대한 인터페이스도 정의하는 추상 BillType 엔티티를 서브 클래스로 상속하는 것이 합리적일까요? 이런 식으로 뭔가 :
@Entity
@DiscriminatorColumn("description")
public abstract class BillType {
// Getters, setters
// Abstract methods that could be used elsewhere - ex:
// BigDecimal calculateInvVal(...)
}
@Entity
@DiscriminatorValue("by case")
public class CaseBillType extends BillType {
// Implementation of calculateInvVal - now when invoicing code needs this method,
// the right one is always associated with the current product!
}
이 구성 데이터를 나타내는 데이터베이스 필드와 행동을 연결하는 편리한 방법을 제공하지만 (대부분의 계정에 의해, 아주 아주 나쁜이다) 기관과 비즈니스 코드를 혼합합니다. 내 레퍼토리에서 빠진이 이슈를 해결할 수있는 디자인 패턴이있을 수 있지만 많은 것을 써야하는 것을 피하고 싶습니다. "청구서 유형이이 경우 청구서 유형이이 경우이 하위 클래스를 가져 오는 경우 등 "코드.
내가이 기술에 잠재적 인 단점에 대한 설명을하고 있는데,이 문제에 대한 다른 해결책을 찾는 것이 정당하다는 것을 알 수는 없을 것입니다.