Hibernate 多对多

oracle10
Myeclipse自动生成mapping

  
_____________ __________________
| | | | _____________
| EVENTS | | PERSON_EVENT | | |
|_____________| |__________________| | PERSON |
| | | | |_____________|
| *EVENT_ID | <--> | *EVENT_ID | | |
| EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |
| TITLE | |__________________| | AGE |
|_____________| | FIRSTNAME |
| LASTNAME |
|_____________|



表events

create table events(
event_id number primary key,
event_date date,
title varchar(10)
)


序列EVENTIDSEQ

create sequence EVENTIDSEQ
minvalue 1
maxvalue 9999999
start with 21
increment by 1
nocache;


触发器Eventsinsert

create or replace trigger Eventsinsert
before insert on events
for each row
begin
if :new.event_id is null then
select eventidseq.nextval into :new.event_id from dual;
end if;
end


表person

create table person(
person_id number primary key,
age number(2),
firstname varchar(10),
lastname varchar(10)
)


序列PERONIDSEQ

create sequence PERONIDSEQ
minvalue 1
maxvalue 99999
start with 1
increment by 1
nocache;


触发器PersonInsert

create or replace trigger PersonInsert
before insert on person for each row
begin
if :new.person_id is null then
select eventidseq.nextval into :new.person_id from dual;
end if;
end;


表person_event

create table person_event(
event_id number,
person_id number
)

alter table person_event add(constraint event_pk foreign key(event_id) references events(event_id))

alter table person_event add (constraint peron_pk foreign key(person_id) references person(person_id))



Event.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="Event" table="EVENTS" schema="TEST">
<id name="eventId" type="java.lang.Long">
<column name="EVENT_ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">EVENTIDSEQ</param>
</generator>
</id>
<property name="eventDate" type="java.util.Date">
<column name="EVENT_DATE" length="7" />
</property>
<property name="title" type="java.lang.String">
<column name="TITLE" length="10" />
</property>
<set name="participants" table="PERSON_EVENT" inverse="true" cascade="save-update">
<key column="EVENT_ID"/>
<many-to-many column="PERSON_ID" class="Person"/>
</set>
</class>
</hibernate-mapping>


Person.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="Person" table="PERSON" schema="TEST">
<id name="personId" type="java.lang.Long">
<column name="PERSON_ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">PERONIDSEQ</param>
</generator>
</id>
<property name="age" type="java.lang.Long">
<column name="AGE" precision="2" scale="0" />
</property>
<property name="firstname" type="java.lang.String">
<column name="FIRSTNAME" length="10" />
</property>
<property name="lastname" type="java.lang.String">
<column name="LASTNAME" length="10" />
</property>
<set name="events" table="PERSON_EVENT" cascade="save-update" lazy="false">
<key column="PERSON_ID"/>
<many-to-many column="EVENT_ID" class="Event"/>
</set>
</class>
</hibernate-mapping>


PersonEvent.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="PersonEvent" table="PERSON_EVENT" schema="TEST">
<composite-id name="id" class="PersonEventId">
<key-many-to-one name="events" class="Event">
<column name="EVENT_ID" precision="22" scale="0" />
</key-many-to-one>
<key-many-to-one name="person" class="Person">
<column name="PERSON_ID" precision="22" scale="0" />
</key-many-to-one>
</composite-id>
<many-to-one name="person" class="Person" insert="false" update="false">
<column name="PERSON_ID" precision="22" scale="0" />
</many-to-one>
<many-to-one name="events" class="Event" insert="false" update="false">
<column name="EVENT_ID" precision="22" scale="0" />
</many-to-one>
</class>
</hibernate-mapping>


Event.java

// default package

import java.util.Date;
import java.util.HashSet;
import java.util.Set;


/**
* Event generated by MyEclipse - Hibernate Tools
*/

public class Event implements java.io.Serializable {


// Fields

private Long eventId;
private Date eventDate;
private String title;
private Set participants = new HashSet();


// Constructors

public Set getParticipants() {
return participants;
}


public void setParticipants(Set participants) {
this.participants = participants;
}


/** default constructor */
public Event() {
}


/** full constructor */
public Event(Date eventDate, String title, Set personEvents) {
this.eventDate = eventDate;
this.title = title;

}


// Property accessors

public Long getEventId() {
return this.eventId;
}

public void setEventId(Long eventId) {
this.eventId = eventId;
}

public Date getEventDate() {
return this.eventDate;
}

public void setEventDate(Date eventDate) {
this.eventDate = eventDate;
}

public String getTitle() {
return this.title;
}

public void setTitle(String title) {
this.title = title;
}
}


Person.java

// default package

import java.util.HashSet;
import java.util.Set;


/**
* Person generated by MyEclipse - Hibernate Tools
*/

public class Person implements java.io.Serializable {


// Fields

private Long personId;
private Long age;
private String firstname;
private String lastname;
private Set events = new HashSet(0);

/** default constructor */
public Person() {
}


/** full constructor */
public Person(Long age, String firstname, String lastname, Set personEvents) {
this.age = age;
this.firstname = firstname;
this.lastname = lastname;
this.events = personEvents;
}


// Property accessors

public Long getPersonId() {
return this.personId;
}

public void setPersonId(Long personId) {
this.personId = personId;
}

public Long getAge() {
return this.age;
}

public void setAge(Long age) {
this.age = age;
}

public String getFirstname() {
return this.firstname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getLastname() {
return this.lastname;
}

public void setLastname(String lastname) {
this.lastname = lastname;
}


public Set getEvents() {
return events;
}


public void setEvents(Set events) {
this.events = events;
}
}


PersonEvent.java

// default package


/**
* personEvent generated by MyEclipse - Hibernate Tools
*/

public class PersonEvent implements java.io.Serializable {


// Fields

private PersonEventId id;
private Person person;
private Event events;


// Constructors

/** default constructor */
public PersonEvent() {
}


/** full constructor */
public PersonEvent(Person person, Event events) {
this.person = person;
this.events = events;
}


// Property accessors

public PersonEventId getId() {
return this.id;
}

public void setId(PersonEventId id) {
this.id = id;
}

public Person getPerson() {
return this.person;
}

public void setPerson(Person person) {
this.person = person;
}

public Event getEvents() {
return this.events;
}

public void setEvents(Event events) {
this.events = events;
}
}


PersonEventId

// default package


/**
* personEventId generated by MyEclipse - Hibernate Tools
*/

public class PersonEventId implements java.io.Serializable {


// Fields

private Event events;
private Person person;


// Constructors

/** default constructor */
public PersonEventId() {
}


/** full constructor */
public PersonEventId(Event events, Person person) {
this.events = events;
this.person = person;
}


// Property accessors

public Event getEvents() {
return this.events;
}

public void setEvents(Event events) {
this.events = events;
}

public Person getPerson() {
return this.person;
}

public void setPerson(Person person) {
this.person = person;
}



public boolean equals(Object other) {
if ( (this == other ) ) return true;
if ( (other == null ) ) return false;
if ( !(other instanceof PersonEventId) ) return false;
PersonEventId castOther = ( PersonEventId ) other;

return ( (this.getEvents()==castOther.getEvents()) || ( this.getEvents()!=null && castOther.getEvents()!=null && this.getEvents().equals(castOther.getEvents()) ) )
&& ( (this.getPerson()==castOther.getPerson()) || ( this.getPerson()!=null && castOther.getPerson()!=null && this.getPerson().equals(castOther.getPerson()) ) );
}

public int hashCode() {
int result = 17;

result = 37 * result + ( getEvents() == null ? 0 : this.getEvents().hashCode() );
result = 37 * result + ( getPerson() == null ? 0 : this.getPerson().hashCode() );
return result;
}
}


Test.java

import java.util.Date;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
public static void main(String[] arg) {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.getCurrentSession();
session.beginTransaction();
Event event = new Event();
event.setEventDate(new Date());

Person person = new Person();
person.setFirstname("dddd");
person.getEvents().add(event);

event.getParticipants().add(person);
session.save(event);
session.getTransaction().commit();
}
}



Hibernate: select EVENTIDSEQ.nextval from dual
Hibernate: select PERONIDSEQ.nextval from dual
Hibernate: insert into TEST.EVENTS (EVENT_DATE, TITLE, EVENT_ID) values (?, ?, ?)
Hibernate: insert into TEST.PERSON (AGE, FIRSTNAME, LASTNAME, PERSON_ID) values (?, ?, ?, ?)
Hibernate: insert into PERSON_EVENT (PERSON_ID, EVENT_ID) values (?, ?)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值