Java 映射链接表与3 PK';冬眠

Java 映射链接表与3 PK';冬眠,java,sql,hibernate,mapping,Java,Sql,Hibernate,Mapping,现在我很难用Hibernate映射链接表 首先,我想解释我想映射的内容: 我有3个表:产品、文档类型、语言 一个产品可以有每种特定语言的每种文档类型(目前我们有7种文档类型)(目前我们有3种语言) 这意味着产品“1”可以具有语言“EN”、“ES”和“FR”中的文档类型“A” 我创建了一个带有3个外键的链接表,它们也是复合主键 下面是我的sql的样子 CREATE TABLE Person( id int PRIMARY KEY AUTO_INCREMENT, name varchar(2

现在我很难用Hibernate映射链接表

首先,我想解释我想映射的内容: 我有3个表:产品、文档类型、语言

一个产品可以有每种特定语言的每种文档类型(目前我们有7种文档类型)(目前我们有3种语言)

这意味着产品“1”可以具有语言“EN”、“ES”和“FR”中的文档类型“A”

我创建了一个带有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)
);
通过最后一个链接表,我可以知道谁拥有哪些文档类型和语言。 我最感兴趣的信息是哪个DocumentType为一个人使用哪种语言

假设我是人A。现在我想知道我用哪种语言拥有哪种文档类型。在SQL中,我认为如下所示:

Select doc_id, lang_id from Person_DocumentType_Language where person_id=1

这有意义吗?在Hibernate中如何映射呢?

一种方法是将
DocumentType
映射到
语言。我对确切的注释有点生疏,但这里是一个开始:

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;
}
公共类人物{
@身份证
公共int id;
@OneToMany(targetEntity=Language.class)
@MapKeyClass(Integer.class)
@CollectionTable(name=“Person\u DocumentType\u Language”)
@MapKeyColumn(name=“doc\u id”)
公共地图docTypeLang;
}