hibernate表关系

来源:百度知道 编辑:UC知道 时间:2024/05/22 04:48:34
有如下3张表:
EVENTS PERSON_EVENT PERSON
*EVENT_ID <--> *EVENT_ID
EVENT_DATE *PERSON_ID <--> *PERSON_ID
TITLE AGE
FIRSTNAME
LASTNAME

PERSON表的映射关系如下:
<class name="event.Person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="firstname"/>
<property name="lastname"/>

<set name="events" table="PERSON_EVENT">
<key column="PERSON_ID"/>
<many-to-many column="EVENT_ID" class="events.Event"/>
</set>
</class>

以上是书上的原文,我尝试着建了3个表并生成了映射表如下:
<hib

是myeclipse给你自动生成的,
myeclipse认为,你写的是两张表,符合1对N的规范,所以优先选择1对N,
如果,你创建三张表,两个实体,一个关系表,这个时候,就会给你生成N对N的关系了:比如

CREATE TABLE events
(
event_id bigint NOT NULL,
event_date date,
title character varying(128),
CONSTRAINT events_pkey PRIMARY KEY (event_id)
)
CREATE TABLE person
(
person_id bigint NOT NULL,
age bigint,
firstname character varying(128),
lsatname character varying(128),
CONSTRAINT person_pkey PRIMARY KEY (person_id)
)

CREATE TABLE person_event
(
event_id bigint NOT NULL,
person_id bigint NOT NULL,
)
不好意思,我的错,需要加上外键关系,在对myeclipse中进行反转表时,要选择一个实体,来进行反转,不要选择关系表,点击完成前,一定要先点击A==>B,B==>A这个,让myeclipse给你生成。我试了,通过
你试一下,肯定可以

首先你要明白,所谓的多对多是指N:1 和1:N ,也就是两个多对一。形成了多对多关系,准确的说hibernate是不认识多对多的,它只认识一对多,建表时 中间表的两个ID字段都是主键且都是外键(这个一定要设定清楚双主键双外键),当一个为主键时另一个为外键,另一个为主键时则反之,这两个字段是两个多对多表的外键,同时是自身的主键,你用的如果是MYSOL创建的时候可能问题不是很明显,如果用的ORACLE估计关系表双主键