2012-03-01 4 views
0

사용할 주석을 결정하려고합니다. 당신의 의견을 제시 할 수 있습니까?OpenJPA : 여러 개의 @Embedded 대 하나의 @ElementCollection

내가 지금 무엇을 가지고 : 동일하게 유지 것이다

@Entity 
public class Balance { 
    @ElementCollection 
    private Map<AmountType, Amount> amounts; 
} 

public enum AmountType { 
    ATM, BRANCH, VAULT; 
} 

양 :

@Entity 
public class Balance { 
    @Embedded 
    private Amount amountAtm; 

    @Embedded 
    private Amount amountBranch; 

    @Embedded 
    private Amount amountVault; 
} 

@Embeddable 
public Amount { 
    private BigDecimal debit; 
    private BigDecimal credit; 
} 

나는 그것을 변경하려면 무엇.

이 변경 이유는 저울 내부의 금액이 개념적으로 모음이기 때문입니다. 나도 같은 시간에 모든 것을 표시하거나 변경하거나 아예 전혀 표시하지 않습니다. 그래서 저는 그들을 그룹으로 대합니다.

질문 : 잔액과 같이

  1. 는 지금 금액은 같은 테이블에 저장됩니다 (내가 열 이름을 오버라이드 (override)는,이 코드에 표시되지 않습니다). 그러나이 변경을하면 모든 데이터를 하나의 테이블에 저장할 수 없습니다. 별도의 테이블에 금액을 저장해야합니다. 이것이 맞습니까?

  2. 이제는 SQL 등에서 JOIN을 작성해야한다는 것을 고려하면 이것은 성능에 어떤 영향을 미칩니 까? Oracle 11g을 사용 중이며 100,000 개의 잔액 레코드 (따라서 300,000 개의 금액)가 있다고 가정 해 봅니다. 변경 후 응용 프로그램의 속도 저하를 알 수 있습니까?

+0

JPA (1 또는 2 또는 2.1) 그러한가 없습니다를 @ EmbeddedCollection 주석을 사용하고 있으며 OpenJPA 문서에도 없습니다. 아마도 당신이 무엇을 의미하는지 명확하게 ... – DataNucleus

+0

@DataNucleus 당신 말이 맞아요, 나는 \ @ ElementCollection 주석을 의미했습니다. 또한, 나는 그것을 더 분명하게하기 위해 질문을 완전히 다시 썼다. 의견에 감사드립니다. – anton1980

답변

0
  1. 는 예, 맞습니다.
  2. 테스트하지 않고 말할 수 없습니다. 테이블에 6 개의 필드를 직접 저장하는 것보다 빠를 수는 없습니다.

내가 이해할 수없는 것은 3 가지 필드에 만족하지 않는 이유입니다. 당신이 당신의 엔티티에 Map<AmountType, Amount> getAmounts() 방법 (및 해당 세터)를 가질 수 있도록하려면, 아무것도를 추가하고 스스로를 실행하지 못하도록 없습니다 :

public Map<AmountType, Amount> getAmounts() { 
    Map<AmountType, Amount> result = new HashMap<AmountType, Amount>(3); 
    result.put(AmountType.ATM, amountAtm); 
    result.put(AmountType.BRANCH, amountBranch); 
    result.put(AmountType.VAULT, amountVault); 
    return result; 
} 
+0

답장을 보내 주셔서 감사합니다. JB. 이러한 객체를 반복 할 수 있기를 원했습니다. 예, 설명한대로 메서드를 구현할 수 있지만 @ElementCollection을 사용하면 더 깨끗한 솔루션과 "올바른 방법"이 될 것이라고 생각했습니다. 제 말은, 만약이 객체들이 컬렉션이라면, 그것들을 매핑 할 충분한 이유가 아닙니까? – anton1980

+0

예, 아마도 맞을 것 같습니다. 그러나 그들은 또한 아마 자신의 테이블에도 있어야합니다. –

관련 문제