는 방법을 지도하는 많은 연결하는 클래스에 매핑된 두 개의 서로 다른 테이블?

StackOverflow https://stackoverflow.com/questions/1662122

문제

나는 증-POJO 매핑을 두 테이블이 있습니다.첫 번째 매핑을 할당합 entity 이름"voucherA"고지도 POJO 을 TableA.두 번째 매핑을 사용"voucherB"entity 이름과 지도 POJO 을 각.

지금은 또한 고객 POJO 매핑을 tablec 에.이 POJO 참조 상품권에서 목록.

<list name="vouchers" table="TableC_vouchers">
  <key column="pid"/>
  <list-index column="position" base="0"/>

  <!-- how to do that right -->
  <many-to-many column="voucher_id" entity-name="voucherB"/>
</list>

나는 어떻게 제대로 지도의 목록은 많은 협회에서는 고객 상품권도록하는 경우 고객 POJO 가 지속되는 바우처 엔티티를 유지하여 각지 않는 경우에 존재하는 대신 TableA?할 수 있습니까?하지 않을 경우,어떤 해결 방법이처럼 보이도록 상품권을 사용하여 고객에게 유지하여 각?(TableA 만 포함 가능한 쿠폰,아용되는 것들)

도움이 되었습니까?

해결책

귀하의 핵심 모델이 잘못된 것 같습니다. 당신의 Voucher 실체는 아마도 많은 속성을 가지고있을 것입니다. Customer? 의심 스럽다. 그럼에도 불구하고, 당신은 당신의 a와 b 테이블에서 그들을 복제하고 있으므로 스키마가 정규화되지 않았 음을 의미합니다.

"사용 가능한"바우처 및 "중고"바우처는 동일한 엔티티가 아닙니다. 대신에 당신이 새로운 엔티티를 만들 것을 제안합니다. UsedVoucher 그것은 둘 다와 관련이 있습니다 Voucher 다중과 Customer 다중-하나이며 "변경된"속성 만 포함합니다. Voucher (만약에 어떠한). 그래서,

Voucher(id, other attributes) // doesn't change from what you have now
Customer (id, other attributes) // doesn't change except for many-to-many; see below
UsedVoucher(id,
 voucher, // what Voucher was used by that customer
 customer, // what Customer has used that voucher
 changed voucher attributes, // if any
 additional attributes // if needed, such as date/time when voucher was used
)

당신의 "다수"에 Customer 관리 가능한 속성으로 필요한 경우 "일대일"(이 고객이 사용하는 바우처 모음)이됩니다. 그렇지 않으면 쿼리를 통해 쉽게 검색 할 수 있습니다.

물리적으로 삭제할 수 없습니다 Vouchers 그러나이 시나리오의 테이블은 (문제의 바우처가 사용되지 않았다면) 대신 논리적 삭제를해야합니다.

다른 팁

나의 제안하는 것이 모두 저장 상품권에서 같은이다.을 구별하는 사이에 사용하지 않는 사람할 수 있거나 또는 부울 깃발이나 판별자치(사용하는 경우에는 상속에서 Java code).

는 경우에도 당신은 기존의 데이터처럼 보이지 않는 마이그레이션 것은 정말 어렵습니다.모든 이용권은 동일한 테이블에서,그들의 관계를 고객은 바로 앞으로 다 많습니다.

나는 생각을 유지 두 테이블에는 것은 어려울 것입니다.기본적으로,당신은 아직도 저장하지는 바우처 사용하지 않지만,당신은 그것을 하지 않고 명시적으로 합니다.나는 확실히 될 수 있는 해결 방법,그러나 나는 무엇을 생각 나는 위에서 설명은 훨씬 더 간단합니다.내 경험에 의하면,이것은 경로가 모든 시간을 선택에 직면했을 때와 비슷한 문제가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top