具有复合键的一对多注释映射
Posted
技术标签:
【中文标题】具有复合键的一对多注释映射【英文标题】:one to many annotation mapping with composite key 【发布时间】:2012-08-01 10:32:42 【问题描述】:我有两张表,如下所述。关键是我的问题有“n”个选择。我设计在第二个表上使用复合键,而不是多列一列作为主键。使用这种方法,我有两个问题。
这是表格设计的好方法吗?我的意思是 TABLE QUESTIONCHOICE 具有复合键而不是主键。
如何在 Hibernate 中使用注释在 QUESTIONBANK 和 QUESTIONCHOICE 表之间进行一对多映射?
任何观点和建议都会有很大帮助。
谢谢,
-维杰·塞尔瓦拉杰
CREATE TABLE QUESTIONBANK(
QUESTIONID INT NOT NULL AUTO_INCREMENT(10001, 1),
QUESTION VARCHAR(200) NOT NULL,
TOPIC VARCHAR(20) NOT NULL,
SUBTOPIC VARCHAR(20) NOT NULL,
COMPLEXITY SMALLINT NOT NULL DEFAULT 1,
QUESTIONTYPE SMALLINT NOT NULL,
VERSION INT NOT NULL DEFAULT 0,
CONSTRAINT QUESTIONBANK_PK PRIMARY KEY (QUESTIONID)
);
CREATE TABLE QUESTIONCHOICE(
QID INT NOT NULL,
CHOICE VARCHAR(100) NOT NULL,
CORRECT_CHOICE BOOLEAN,
VERSION INT NOT NULL DEFAULT 0,
CONSTRAINT QUESTIONCHOICE_PK PRIMARY KEY (QID, Choice),
CONSTRAINT QUESTIONCHOICE_FK FOREIGN KEY (QID) REFERENCES QUESTIONBANK (QUESTIONID)
);
【问题讨论】:
【参考方案1】:让我回答你问题的前半部分......
这是表格设计的好方法吗?我的意思是 TABLE QUESTIONCHOICE 具有复合键而不是主键。
这不是一个非此即彼的命题。您有一个键,它恰好是既复合键和主键。
您的设计是否有效取决于CHOICE
的相同值是否应该能够存在于多个QUESTIONCHOICE
行中(连接到不同的问题):
CHOICE
设为键。
是否还要添加代理键是一个平衡的问题,这里有some criteria 来帮助您做出决定。
【讨论】:
感谢您的回复回答了我的第一个问题。实现的第二部分很棘手:)以上是关于具有复合键的一对多注释映射的主要内容,如果未能解决你的问题,请参考以下文章
微风:尽管定义了 invForeignKeyNames,但仍然没有填充复合外键的单向一对多导航