Сопоставление таблицы связи с 3 ПК в Hibernate - PullRequest
0 голосов
/ 06 мая 2011

сейчас у меня проблемы с отображением таблицы связей с Hibernate.

Прежде всего я хочу объяснить, что я хочу отобразить: у меня есть 3 таблицы: Product, DocumentType, Language.

Один продукт может иметь каждый DocumentType (на данный момент у нас есть 7 DocumentTypes) на каждом конкретном языке (на данный момент у нас есть 3 языка)

Это означает, что продукт "1" может иметь DocumentType "A" вязык "EN", "ES" и "FR".

Я создал таблицу связывания с 3 внешними ключами, которые также являются составным первичным ключом.

Вот как выглядит мой sql.

CREATE TABLE Person(
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255)
);

CREATE TABLE DocumentType(
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  key varchar(255)
);

CREATE TABLE Language(
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  code varchar(2)
);

CREATE TABLE Person_DocumentType_Language(
  person_id int NOT NULL,
  doc_id int NOT NULL,
  lang_id NOT NULL,
  FOREIGN KEY(person_id)
    REFERENCES Person(id),
  FOREIGN KEY(doc_id)
    REFERENCES DocumentType(id),
  FOREIGN KEY(lang_id)
    REFERENCES Language(id),
  PRIMARY KEY(person_id, doc_id, lang_id)
);

С последней таблицей связывания я могу сказать, у какого Person какие DocumentTypes и на каких языках.В основном меня интересует информация о том, какой DocumentType имеет какой язык для одного человека.

Скажи, что я человек A. Теперь я хочу знать, какие типы документов у меня есть, с какими языками.Я думаю, что в SQL это будет выглядеть так:

Select doc_id, lang_id from Person_DocumentType_Language where person_id=1

Имеет ли это смысл?И как я могу отобразить это в Hibernate?

1 Ответ

0 голосов
/ 06 мая 2011

У одного подхода есть Map от DocumentType до Language. Я немного заржавел от точной аннотации, но вот начало:

public class Person {

    @Id
    public int id;

    @OneToMany(targetEntity=Language.class)
    @MapKeyClass(Integer.class)
    @CollectionTable(name="Person_DocumentType_Language")
    @MapKeyColumn(name="doc_id")
    public Map<DocumentType,Language> docTypeLang;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...