Составные идентификаторы между несколькими таблицами в Hibernate - PullRequest
2 голосов
/ 13 сентября 2010

Я довольно новичок в Hibernate и столкнулся с некоторыми проблемами при работе с композитными идентификаторами и первичными ключами, Я просто хочу сделать эту работу:

=======    =======
 Table A    Table B
=======    =======
atr1 PK    atr1 FK(Table A, atr1) PK
atr2 PK    atr2 FK(Table A, atr2) PK
atr3       atr3 FK(Table C, atrN) PK
           atr4 

И отношение следующее: A не имеет (знает) ни одного или нескольких экземпляров B (список из них), а B имеет (знает) только один экземпляр C (сейчас это не проблема).

Я читал кое-что об использовании классов для указания составных идентификаторов (в официальном учебнике), переопределении equals () и hashCode (), но я не могу заставить это работать, потому что я довольно озадачен тем, как написать мой hbm XML-файлы ...

Любая помощь? Спасибо!

1 Ответ

0 голосов
/ 14 сентября 2010

Вы можете оказаться счастливее, если просто упростите модель данных и избавитесь от некоторой избыточности.Работа с Hibernate над более сложными вопросами моделирования данных может привести к разочарованию позже, даже если вы все же заработаете.Возможно, стоит рассмотреть вопрос о предоставлении B простого A_id вместо свойств самого A (учитывая, как они точно отображаются на первичный ключ A)

    ___A___
    id PK
    atr1
    atr2
    atr3
    --> composite unique(atr1, atr2)

    ___B___
    id PK
    a_id FK (A.id)
    c_id FK (C.id)
    atr4
    --> composite unique(a_id, c_id)

    ___C___
    id PK
    atrN  unique
...