2012-05-11 2 views
1

가끔은 수많은 필드가있는 거대한 엔티티가 있으며 복잡성을 처리하기 위해 엔티티를 별도의 클래스로 분리하는 것이 좋습니다. JPA에서 테이블을 복합 엔티티에 어떻게 매핑합니까?

class Foo { 
    String someStuff; 
    String aThingBlah; 
    String aThingEtc; 
    String bThingWhatever; 
    String bThingBacon; 
} 

나는

에 (DB를 테이블을 변경하지 않고)이 리팩토링하고 싶습니다 (주석 왼쪽으로) 내가 열

someStuff, aThingBlah, aThingEtc, bThingWhatever, bThingBacon 

와 테이블 푸와이 클래스를 말해봐

class Foo { 
    String someStuff; 
    AThing aThing; 
    BThing bThing; 
} 
class AThing { 
    String blah; 
    String etc; 
} 
class BThing { 
    String whatever; 
    String bacon; 
} 

어떻게 할 수 있습니까?

답변

1

여기 당신은 BThing을 저장할 수 없습니다

class Foo { 

    String someStuff; 

    @Embedded 
    @AttributeOverrides({ 
    @AttributeOverride(name = "blah", column = @Column(name="aThingBlah")), 
    ... 
    }) 
    AThing aThing; 

}; 

@Embeddable 
class AThing { 

    @Column(...) 
    String blah; 

} 
0

나는 그것이 가능하다고 생각하지 않는다. 어느 쪽이 이드를 안고 있니? 그들은 모두 같은 ID를 공유 할 것이고 최대 절전 모드로 인해 이들 중 하나를로드하거나 저장하는 방법을 모를 것입니다. * Athing *, 내가 에 정의 된 필드에 무슨 일이 일어날 지 다음 BThing을 저장한다면 또한

(판별의 일종없이)? 그들은 최대 절전 모드 범위에서 완전히 벗어날 것입니다.

+0

... 기본입니다 - 모든 필드를 포함 하나의 테이블이있다. Foo는 복합체가 아니라 집합체입니다. 즉, BThing은 Foo의 일부로 만 존재해야합니다. 즉, 자체적으로 존재해서는 안됩니다. – nevster

관련 문제