一对多 多对一 外键双向关联
一个皇帝对应多个大臣如下:
emperor_info did(int 4 pk ) name(varchar)
minister_info mid(int 4 pk) name(varchar) did(int int 4 fk)
实体:
| packagebi.one2many;importjava.util.HashSet;importjava.util.Set;publicclassEmperor {    privateintid;    privateString name;    privateSet<Minister> ministers = newHashSet<Minister>();    publicEmperor() {    }    publicEmperor(intid, String name, Set<Minister> ministers) {        super();        this.id = id;        this.name = name;        this.ministers = ministers;    }    publicintgetId() {        returnid;    }    publicvoidsetId(intid) {        this.id = id;    }    publicString getName() {        returnname;    }    publicvoidsetName(String name) {        this.name = name;    }    publicSet<Minister> getMinisters() {        returnministers;    }    publicvoidsetMinisters(Set<Minister> ministers) {        this.ministers = ministers;    }}packagebi.one2many;publicclassMinister {    privateintid;    privateString name;    privateEmperor emperor;    publicMinister() {    }    publicMinister(intid, String name, Emperor emperor) {        super();        this.id = id;        this.name = name;        this.emperor = emperor;    }    publicintgetId() {        returnid;    }    publicvoidsetId(intid) {        this.id = id;    }    publicString getName() {        returnname;    }    publicvoidsetName(String name) {        this.name = name;    }    publicEmperor getEmperor() {        returnemperor;    }    publicvoidsetEmperor(Emperor emperor) {        this.emperor = emperor;    }} | 
hbm配置文件:
| <hibernate-mapping>    <classname="bi.one2many.Emperor">        <id name="id"column="did">            <generator class="native"/>        </id>        <property name="name"type="string"column="name"></property>                <!-- confirure the uniredirection association -->        <set name="ministers"inverse="true"cascade="all">            <key column="did"not-null="true"></key>            <one-to-many class="bi.one2many.Minister"/>        </set>    </class></hibernate-mapping><hibernate-mapping>    <classname="bi.one2many.Minister">        <id name="id"column="mid">            <generator class="native"/>        </id>        <property name="name"type="string"column="name"></property>        <many-to-one name="emperor"column="did"cascade="all"></many-to-one>    </class></hibernate-mapping> | 
测试文件:
| publicclassTest {        @org.junit.Test    publicvoidtestAdd() {        SessionFactory sf = HibernateUtil.getSessionFactory();        Session session = sf.getCurrentSession();        session.beginTransaction();                Minister m1 = newMinister();        m1.setName("廉颇");                Minister m2 = newMinister();        m2.setName("蔺相如");                Emperor emperor = newEmperor();        emperor.setName("齐威王");        //emperor.getMinisters().add(m1);        //session.save(emperor);                m1.setEmperor(emperor);        m2.setEmperor(emperor);                session.save(m1);        session.save(m2);        session.beginTransaction().commit();    }} | 
测试结果:
| Hibernate: insert into Emperor (name) values (?)Hibernate: insert into Minister (name, did) values (?, ?)Hibernate: insert into Minister (name, did) values (?, ?) | 
在双向关联关系配置中有inverse属性和cascade属性比较让人迷糊,不过参看一下这个文章写得蛮清楚的:
Hibernate中的Inverse和cascade属性配置
http://www.cnblogs.com/focusj/archive/2011/03/23/2057603.html。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号