Hibernate: множественные отношения FK - PullRequest
0 голосов
/ 30 ноября 2010

Я немного застрял, определяя Hibernate Entity:

Предполагая, что у меня есть две таблицы в базе данных:

(A)

  • fromCompany
  • toCompany
  • viaCompany

(B)

  • companyID (PK)
  • описание

, где элементы (A) указывают на первичный ключ (B);таким образом, между ФК и ПК существует 3 отношения один-к-одному.Я предполагаю, что 3 оператора OneToOne с различными условиями mappedBy - это не тот путь, а?Был долгий день - я, наверное, просто не понимаю;)

Спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 30 ноября 2010

Самый простой способ реализовать класс A с 3 отношениями ManyToOne, указывающими на класс B

@Entity
class ClassA {

    //@ID
    //private id;

    @ManyToOne
    private ClassB from;

    @ManyToOne
    private ClassB toCompany;

    @ManyToOne
    private ClassB viaCompany;
}

, не будет работать , потому что каждому объекту нужен идентификатор.- Вы можете попытаться решить эту проблему с помощью комбинированного идентификатора (состоящего из трех ассоциаций), но я предполагаю, что это приведет к большим трудностям при реализации идентификатора, состоящего из ассоциаций с другими объектами.

@ see Спящий режим / постоянство без @ Id

Другим способом, предоставляемым Hibernate, являются так называемые троичные ассоциации.- В этом случае вы моделируете полную таблицу A в виде троичного отношения m: n.- Но это тоже очень сложная задача.

@ см. http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html#collections-ternary

0 голосов
/ 30 ноября 2010

Если я правильно понял, вы хотите, чтобы ваша база данных выглядела так:

tableA
- id
- fromCompanyId (references tableB.id)
- toCompanyId (references tableB.id)
- viaCompanyId (references tableB.id)

tableB
- id
- description

Если это так, вы, безусловно, можете иметь это.Вам просто нужно переопределить имя столбца по умолчанию для отношения, чтобы у каждой ассоциации было свое собственное имя столбца, а не возвращаться к имени по умолчанию, в результате чего три ассоциации с одним и тем же именем вызывают проблемы.* Я не очень согласен с OneToOne, но я предполагаю, что это было сознательное решение.

См. http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-association

0 голосов
/ 30 ноября 2010

Вы, безусловно, можете сделать это с помощью отношений один на один.У вас будет три объекта Company в вашем классе A и соответствующие сопоставления.

Было бы полезно, если бы мы могли видеть код и отображения спящего режима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...