`
jia106329
  • 浏览: 60969 次
  • 性别: Icon_minigender_2
  • 来自: tj
社区版块
存档分类
最新评论

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 (?, ?)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics