Сопоставление ManyToMany с таблицей соединений / ссылок с использованием 3 полей идентификаторов - PullRequest
0 голосов
/ 03 августа 2009

Можно ли использовать сопоставление @ManyToMany для объединения, используя 3 столбца PK?

Я вполне уверен, что это невозможно, и решение состоит в том, чтобы раскрыть сущность, используя @OneToMany, что я делал в прошлом, но поскольку это поле просто PK, я подумал, что, возможно, есть какое-то умное отображение, чтобы спасти меня работа.

С надеждой - JamesC

Обновление в ответ на ChssPly

Вот фрагмент моей сущности 'Join'.

@SuppressWarnings("serial")
    @Embeddable
    public static class Id implements Serializable {

        @Column(name = StringPool.Column.APPLICATION_ID)
        private Long applicationId; 

        @Column(name = StringPool.Column.ARTICLECATEGORY_ID)
        private Long articleCategoryId;

        @Column(name = StringPool.Column.USER_ID)
        private Long userId;

        public Id() {}

        public Id(Long applicationId, Long articleCategoryId, Long userId) {
            this.applicationId = applicationId;
            this.articleCategoryId = articleCategoryId;
            this.userId = userId;
        }

        public boolean equals(Object o) {
            if (o instanceof Id) {
                Id that = (Id)o;
                return this.applicationId.equals(that.applicationId) &&
                       this.articleCategoryId.equals(that.articleCategoryId) &&
                       this.userId.equals(that.userId);
            } else {
                return false;
            }
        }

        public int hashCode() {
            return applicationId.hashCode() + articleCategoryId.hashCode() + userId.hashCode();
        }
    }

1 Ответ

3 голосов
/ 03 августа 2009

Это зависит от того, что вы подразумеваете под "3 колонки ПК". Есть ли у одной из сущностей, которые вы связываете, составной ключ? Вы можете указать несколько столбцов соединения:

@Entity
public class MyEntity {
@ManyToMany(targetEntity=MyOtherEntity.class)
@JoinTable(name="MY_JOIN_TABLE",
    joinColumns=@JoinColumn(name="ENTITY_ID"),
    inverseJoinColumns={@JoinColumn(name="OTHER_ID1"), @JoinColumn(name="OTHER_ID2")})
  public Collection getOthers() {
      return employees;
  }
}

Если вы не это имели в виду, уточните свой вопрос.

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