首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Hibernate联系关系映射-many to many 外键单向关联

2012-10-09 
Hibernate关联映射-many to many 外键单向关联.?多对多的实例很多,这里说一个比较简单的例子,而且还是单向

Hibernate关联映射-many to many 外键单向关联.

?

多对多的实例很多,这里说一个比较简单的例子,而且还是单向引用.. 比如说一个人可以对应多个地址,一个地址可以被多个人所拥有..

?

这就是对多多的关联关系,

?

?

在做多对多的关联的时候,一定要注意,别遗漏 中间表的配置。

?

下面是Pojo的类:

Person_FK_Many_to_Many:

?

?

然后再Hibernate.cfg.xml中,把刚刚建立的两个*.hbm.xml文件。

<mapping resource="pack/java/model/Address_FK_Many_to_Many.hbm.xml"/>
?<mapping resource="pack/java/model/Person_FK_Many_to_Many.hbm.xml"/>

?

最后,就写一个测试类,来测试刚刚配置的单向多对多的关联关系.

?

package pack.java.test;import java.util.List;import java.util.Set;import org.hibernate.Query;import org.hibernate.Session;import pack.java.hibernate.HibernateSessionFactory;import pack.java.model.Address_FK_Many_to_Many;import pack.java.model.Person_FK_Many_to_Many;/** * 一个人可以对应多个地址,一个地址,也可以对应多个人。 * @author Administrator * */public class HibernateDemoManyToMany {private Session getSession(){Session session = HibernateSessionFactory.getSession();return session;}public static void main(String[] args) {HibernateDemoManyToMany demoManyToMany = new HibernateDemoManyToMany();Session session = demoManyToMany.getSession();//保存;demoManyToMany.savePerson(session);//查询;demoManyToMany.queryPerson(session);}private void queryPerson(Session session){//Person_FK_Many_to_Many personFKManyToMany = (Person_FK_Many_to_Many) session.load(Person_FK_Many_to_Many.class, 1);String hql = "select p from Person_FK_Many_to_Many p";Query query = session.createQuery(hql);List<Person_FK_Many_to_Many> list = query.list();for(Person_FK_Many_to_Many personFKManyToMany:list){System.out.println(personFKManyToMany.getId()+","+personFKManyToMany.getName()+","+personFKManyToMany.getAge());Set<Address_FK_Many_to_Many> addressFKManyToManies = personFKManyToMany.getAddressFKManyToManieSet();for (Address_FK_Many_to_Many addressFKManyToMany : addressFKManyToManies) {System.out.println(addressFKManyToMany.getAddressID()+","+addressFKManyToMany.getAddressDetail());}}session.close();System.out.println(list.get(0).getAddressFKManyToManieSet().size());}private void savePerson(Session session){Person_FK_Many_to_Many fkManyToMany1 = new Person_FK_Many_to_Many();fkManyToMany1.setAge(22);fkManyToMany1.setName("ZhouHaiTao");Person_FK_Many_to_Many fkManyToMany2 = new Person_FK_Many_to_Many();fkManyToMany2.setAge(23);fkManyToMany2.setName("ZhangSan");Address_FK_Many_to_Many addressFKManyToMany1 = new Address_FK_Many_to_Many();addressFKManyToMany1.setAddressDetail("北京市朝阳区");Address_FK_Many_to_Many addressFKManyToMany2 = new Address_FK_Many_to_Many();addressFKManyToMany2.setAddressDetail("深圳市罗湖区");Address_FK_Many_to_Many addressFKManyToMany3 = new Address_FK_Many_to_Many();addressFKManyToMany3.setAddressDetail("长沙市雨花区");fkManyToMany1.getAddressFKManyToManieSet().add(addressFKManyToMany1);fkManyToMany1.getAddressFKManyToManieSet().add(addressFKManyToMany2);fkManyToMany2.getAddressFKManyToManieSet().add(addressFKManyToMany2);fkManyToMany2.getAddressFKManyToManieSet().add(addressFKManyToMany3);session.beginTransaction().begin();//保存Peron第一个对象;session.save(fkManyToMany1);//保存Person第二个对象;session.save(fkManyToMany2);session.beginTransaction().commit();}}

?

?

控制输出入如下:
1,ZhouHaiTao,22
1,深圳市罗湖区
2,北京市朝阳区


2,ZhangSan,23
1,深圳市罗湖区
3,长沙市雨花区

?

热点排行