누구나 이 있으십니까?은 ORM 도구에 대한 상속 지원을 원했고 사용 했습니까? 그렇다면 어떤 것이 최선의 지원이라고 생각하십니까?ORM 상속
ORM 상속은 "하늘의 원형"개념입니까? 도메인 클래스에서 상속을 의미하는 경우
누구나 이 있으십니까?은 ORM 도구에 대한 상속 지원을 원했고 사용 했습니까? 그렇다면 어떤 것이 최선의 지원이라고 생각하십니까?ORM 상속
ORM 상속은 "하늘의 원형"개념입니까? 도메인 클래스에서 상속을 의미하는 경우
나는이 질문을 많이 좋아한다. 나는 잠시 동안 ORM 도구 (Toplink, 지금은 eclipselink, Hibernate)를 사용해 왔지만 JPA 문서에서 언급 된 것처럼 항상 보았다. 그러나 나는 그것을 실제로 필요로하지 않았다. 기본적으로 ORM은 데이터베이스에 대한 레코드를 가져 오기 위해 tedius 코드를 작성하지 못하도록 막을 내릴 철학입니다. 그건 정말 큰 timesaver이며 그것은 당신이 어리석은 실수를하지 못하게합니다. 물론 이것으로 멋진 것들을 할 수는 있지만 컨트롤러에 저장하지 않는 이유는 MVC를 따르는 것보다 모델에 고정시키는 것입니다.
전통적인 "하나의 클래스 당 테이블"접근 방법이 대부분의 경우에 효과가 있다고합니까? –
내 경우에는 그것이 항상 내가 발견 한 것입니다. 상속을 사용하면 매핑 IMO가 혼란스러워서 유용한 것 이상의 장난감이됩니다. – GBa
, 내가 NHibernate에 및/또는 성 액티브로 모든 시간을 사용하여, 그들은 세 가지 매핑 전략을 지원합니다
감사합니다. 나는 그들을 확인해 보겠습니다. –
@Mauricio 우리는 '마스터'라고 부르는 레코드 유형을 가진 프로젝트를 진행 중입니다. 약 17 가지 유형의 마스터 레코드가 있으며, 대부분 유사한 데이터 필드가 있지만 각 필드에는 하나 또는 두 개의 고유 한 필드가있을 수 있습니다. 앞의 사람들은 상속을 사용하여 17 개의 엔티티 하위 클래스가있는 마스터 엔티티 클래스를 만들었습니다. 그것은 처음에는 훌륭하게 보였지만 잠시 동안 작업 한 후에는 null 값을 허용하는 하나의 '마스터'테이블이 더 좋지 않을 수 있는지 궁금합니다.데이터베이스에 17 개의 다른 테이블이 있습니다. 한 유형을 다른 유형으로 쉽게 변경할 수 없습니다). 나는 정말로 당신의 생각에 감사 할 것입니다. – theblang
@mattblang 안녕하세요 매트, 매핑 전략과 도메인 클래스의 상속을 혼동하지 마십시오. 개별 테이블이나 단일 테이블에 매핑 된 17 개의 서브 클래스가있을 수 있으므로 참조를 위해 NHibernate 문서를 확인하십시오. 하나의 유형을 다른 유형으로 변경해야하는 경우, 일반적으로 상속과 특히 클래스 당 테이블이 잘 작동하지 않는다는 것을 이미 알고있었습니다. –
나는 Hibernate (그리고 Django와 함께)에서 상속을 사용했고, 그것을 유감스럽게 후회했다.
"상속을 통한 구성"원칙은 특히 도메인 클래스에 해당됩니다. 상속이 모델 수준에서 의미가있는 몇 가지 사례가 있다는 것에 동의하지만 대부분의 경우 상속은 매우 정적 인 도메인 모델을 제공하며 한 개체는 다른 클래스로 변경할 수 없습니다.
또한 대부분의 개발자는 데이터베이스 수준에서 상속 개념에 만족하지 않으므로 유지 관리가 더욱 복잡해집니다.
마지막으로, Hibernate에 의해 배치 된 프록시가 객체의 실제 클래스를 숨길 것 같은 기술적 문제가 있습니다. 그것은 "의 인스턴스"가 비정상적으로 행동하게 만듭니다. 물론 "인스턴스"가 코드 냄새라고 말할 수 있습니다. 아마도 컴포지션이 더 나은 솔루션 일 수 있다는 또 다른 힌트 일 수 있습니다.
똑같은 표 당 (표정과 함께) 보이는 것이 내가 여기서 읽고있는 것에서 갈 길입니다. 통찰력에 감사드립니다. –
동의하지 않습니다. 하나의 클래스에서 다른 클래스로 엔티티를 변경할 수 없다는 것을 명심한다면, 이는 공통된 OOP 지식을 다른 관계형 모델에 적용 할 수있게 해주는 매우 강력한 기술입니다. –
프록시 뒤에있는 실제 유형을 확인하는 것은 아주 냄새가 난다. 방문객이나 다형성을 사용하라. http://www.hibernate.org/280.html –
복잡한 비즈니스 소프트웨어를 작성하는 경우 필요합니다.
개인이나 단체에 물건을 판매하고 싶다고 가정 해 보겠습니다. 판매 주문에서 구매자는 하나가 될 것입니다. 상속 재산이 없으면 어떻게합니까?
@Entity
@Inheritance
public abstract class Party {
@Id
private Long id;
...
}
@Entity
public class Individual extends Party {
...
}
@Entity
public class Organization extends Party {
...
}
@Entity
public class SalesOrder {
private Party buyer;
...
}
그런 다음 당신이 할 수 있습니다 :
salesOrder.setBuyer(someOrganization)
또는 salesOrder.setBuyer(someIndividual)
당신이 ORM 상속에 의해 무엇을 의미합니까 상속
, 당신은 이런 식으로 뭔가를 할 거라고? –
다른 엔티티 클래스에서 파생 된 엔티티 클래스를 가질 수 있습니다. –