Java 映射链接表与3 PK';冬眠
现在我很难用Hibernate映射链接表 首先,我想解释我想映射的内容: 我有3个表:产品、文档类型、语言 一个产品可以有每种特定语言的每种文档类型(目前我们有7种文档类型)(目前我们有3种语言) 这意味着产品“1”可以具有语言“EN”、“ES”和“FR”中的文档类型“A” 我创建了一个带有3个外键的链接表,它们也是复合主键 下面是我的sql的样子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
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;
}