2010-04-14 3 views
1

Accessory 오브젝트의리스트를 포함한 클래스 Player가 있습니다. 악세사리에는 두 가지 종류가 있습니다. SocketedAccessories에는 SocketJewels 목록이 있고 MagicAccessories에는 MagicEnchantments 목록이 있습니다.Hibernate 콜렉션의 복수형 타입

데이터베이스 수준에는 플레이어를 나타내는 players 테이블과 액세서리 목록이 포함 된 accessories 테이블이 있습니다. 액세서리에는 소켓이 있는지 또는 마법인지를 나타내는 유형 필드가 있으며 한 유형에서만 사용되는 열은 다른 유형의 항목으로 비워 두었습니다. 소켓 보석이나 각 액세서리의 마법 요소를 나타내는 socket_jewelsmagic_enchantments 테이블이 있습니다.

나는 이것을 Hibernate와 매핑하는 정확한 방법을 찾아 내려하고있다. 한 가지 방법은 플레이어가 SocketedAccessories 용 액세서리와 MagicAccessories 용 액세서리의 두 가지 목록을 갖는 것입니다. 그래도 바람직하지 않은 것 같습니다. 내가 원하는 건 플레이어가 두 가지 유형의 것을 모두 포함하는 List<Accessory> accessories 필드를 가져야한다는 것입니다.

hbm.xml이나 annotation에서 Hibernate에게이를 알려주는 방법이 있습니까?

답변

2

hbm.xml 또는 주석 중 하나에서 Hibernate에이를 알리는 방법이 있습니까? (인스턴스가 특별한 판별 자 컬럼에 의해 구별되는 모든 슈퍼과 서브 클래스의 모든 속성은 같은 테이블에 매핑되는 ) 당신이 클래스 계층 구조 전략 당 단일 테이블과 같은 외모를 설명하고

.

당신은 annotations 및/또는 xml mappings으로이 매핑 할 수 있습니다 (단일 List이, Hibernate는 즉 당신이 Accessory 슈퍼 클래스에 쿼리와 서브 클래스의 목록을 얻을 수 있습니다 다형성 쿼리를 지원합니다).

업데이트 : 액세서리가 인터페이스 인 경우, this previous answer을보십시오.

+0

이것은 좋은 소식입니다. 비록 "액세서리"가 기본 클래스이고 인터페이스가 아닌 것 같아요. 목록을 갖고 싶습니다. –

+0

@CaptainAwesomePants 액세서리는 인터페이스가 될 수 있습니다. 그러나 hbm을 사용해야 할 수도 있습니다. Hibernate 핵심 문서는 실제로 인터페이스를 사용할 수 있다고 명시 적으로 언급합니다. JPA와의 인터페이스의 경우를 다루는 다른 답변에 대한 링크를 추가하겠습니다. –

+0

아, 알겠지만 지불이 인터페이스라는 사실을 놓쳤습니다. (또한 "주석 인터페이스는 현재 지원되지 않습니다."비트가 없습니다.) 고맙습니다! –

관련 문제