Work.java
package com.javamodel.hibernate; import java.util.HashSet; import java.util.Set; public class Work { private String id = null; private String title = null; private Set authors = new HashSet(); public Work(){} /** * @return */ public Set getAuthors() { return authors; } /** * @return */ public String getId() { return id; } /** * @return */ public String getTitle() { return title; } /** * @param set */ public void setAuthors(Set set) { authors = set; } /** * @param string */ public void setId(String string) { id = string; } /** * @param string */ public void setTitle(String string) { title = string; } }
work.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping> <class name="com.javamodel.hibernate.Work" table="work" > <id name="id" column="id"> <generator class="uuid.hex"/> </id> <property name="title" column="title" /> <!--多对多没有什么主次之分了,描述好以后,会自动产生一个中间表,记住两边都要save--> <set name="authors" table="author_work" inverse="true"> <key column="work_id"/> <many-to-many column="author_id" class="com.javamodel.hibernate.Author" /> </set> </class> </hibernate-mapping>
Author.java加上
private Set works = new HashSet();//get,set
author.hbm.xml加上
<code> <set name="works" table="author_work">
<key column="author_id"/>
<many-to-many column="work_id" class="com.javamodel.hibernate.Work" />
</set>
</code>
Example.java
package com.javamodel.hibernate; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.Logger; import net.sf.hibernate.HibernateException; import net.sf.hibernate.MappingException; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.Transaction; import net.sf.hibernate.cfg.Configuration; public class Example{ private static Logger logger = Logger.getLogger(Example.class); private static SessionFactory _sessions = null; private static Properties pops = new Properties(); static{ try { InputStream stream = Example.class.getResourceAsStream("hibernate.properties"); try { pops.load(stream); } catch (IOException e1) { e1.printStackTrace(); } Configuration cfg = new Configuration(); cfg.addClass(Person.class); cfg.addClass(Author.class); cfg.addClass(Publication.class); cfg.addClass(Work.class); cfg.setProperties(pops); _sessions = cfg.buildSessionFactory(); } catch (MappingException e) { e.printStackTrace(); } catch (HibernateException e) { e.printStackTrace(); } } public static void main(String[] args) throws HibernateException { Person person1 = new Person(); person1.setName("HengfeiDo1"); person1.setEmail("smallduzi@sohu.com"); Person person2 = new Person(); person2.setName("HengfeiDo2"); person2.setEmail("smallduzi@sohu.com"); Person person3 = new Person(); person3.setName("HengfeiDo3"); person3.setEmail("smallduzi@sohu.com"); Person person4 = new Person(); person4.setName("HengfeiDo4"); person4.setEmail("smallduzi@sohu.com"); Publication publication1 = new Publication(); publication1.setBookName("AAA"); publication1.setDataTime("20031224"); Publication publication2 = new Publication(); publication2.setBookName("BBB"); publication2.setDataTime("20031225"); Publication publication3 = new Publication(); publication3.setBookName("CCC"); publication3.setDataTime("20031226"); Publication publication4 = new Publication(); publication4.setBookName("DDD"); publication4.setDataTime("20031227"); Publication publication5 = new Publication(); publication5.setBookName("EEE"); publication5.setDataTime("20031228"); Publication publication6 = new Publication(); publication6.setBookName("FFF"); publication6.setDataTime("20031229"); Publication publication7 = new Publication(); publication7.setBookName("GGG"); publication7.setDataTime("20031230"); Publication publication8 = new Publication(); publication8.setBookName("HHH"); publication8.setDataTime("20031231"); Author author1 = new Author(); author1.setAlias("smallduzi"); author1.setPerson(person1); author1.getPublications().add(publication1); author1.getPublications().add(publication2); Author author2 = new Author(); author2.setAlias("adu"); author2.setPerson(person2); author2.getPublications().add(publication3); author2.getPublications().add(publication4); Author author3 = new Author(); author3.setAlias("dududu"); author3.setPerson(person3); author3.getPublications().add(publication5); author3.getPublications().add(publication6); Author author4 = new Author(); author4.setAlias("xiaoduzi"); author4.setPerson(person4); author4.getPublications().add(publication7); author4.getPublications().add(publication8); publication1.setAuthor(author1); publication2.setAuthor(author1); publication3.setAuthor(author2); publication4.setAuthor(author2); publication5.setAuthor(author3); publication6.setAuthor(author3); publication7.setAuthor(author4); publication8.setAuthor(author4); Work work1 = new Work(); work1.setTitle("111111"); work1.getAuthors().add(author1); work1.getAuthors().add(author2); Work work2 = new Work(); work2.setTitle("222222"); work2.getAuthors().add(author3); work2.getAuthors().add(author4); Work work3 = new Work(); work3.setTitle("333333"); work3.getAuthors().add(author1); work3.getAuthors().add(author2); Work work4 = new Work(); work4.setTitle("444444"); work4.getAuthors().add(author3); work4.getAuthors().add(author4); author1.getWorks().add(work1); author1.getWorks().add(work3); author2.getWorks().add(work2); author2.getWorks().add(work4); //这里写的罗嗦点。希望大家能看懂 Session session = _sessions.openSession(); Transaction tx = null; try{ tx = session.beginTransaction(); session.save(author1); session.save(author2); session.save(author3); session.save(author4); session.save(work1); session.save(work2); session.save(work3); session.save(work4); tx.commit(); System.out.println("---over---"); }catch(HibernateException he){ if(tx != null) tx.rollback(); throw he; } finally{ session.close(); } } }