有3个数据库表,表user(id,name)为用户信息表,表addresses(id,addr)为用户地址表,表user_addr(id,user_id,addr_id),为user和addresses的对应关系表,一个用户可能有多个地址。现在我想一次把所有的用户及其地址关系取出,请问映射关系的配置文件应该怎么写,谢谢

解决方案 »

  1.   

    找本hibernate教材看看多对多的映射怎么写,这是典型的多对多映射。
      

  2.   

     这样设计的数据库表示user和address是many to many 的关系.
    一般我在使用的时候都会生成一个第三张表的POJO类,然后分别使用one to many的关系去映射.
      

  3.   

    试试看用建模工具,如Rose,逆向工程过去,再看看他怎么写的
      

  4.   

    设置主外键,然后采用myeclipse等生成工具生成的里面就有多对多了,然后查下用户,根据用户级联就可以了,试下,如果没有myeclipse,再说。
      

  5.   

    兄弟manytoone的东西  HIBERNATE的官方文档好好看看
    给你个例子:
    hibernate.cfg.xml文件如下:
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <!-- Generated by MyEclipse Hibernate Tools.               -->
    <hibernate-configuration>
    <session-factory>
         <property name="connection.username">sa</property>
         <property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databaseName=ORTemp</property>
         <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
         <property name="connection.password">810424</property>
         <property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
         <mapping resource="org/Miao/Bean/PeopleBean.hbm.xml" />
         <mapping resource="org/Miao/Bean/ComputerBean.hbm.xml" />
    </session-factory>
    </hibernate-configuration>
    然后定义持久化类ComputerBean和PeopleBean。
    ComputerBean.class
    package org.Miao.Bean;
    public class ComputerBean {
         private String id;//COMPUTERTABLE.CID
         private String model;//COMPUTERTABLE.CMODEL
         private PeopleBean people;//PEOPLETABLE表
         public String getId() {
             return id;
         }
         public String getModel() {
             return model;
         }
         public PeopleBean getPeople() {
             return people;
         }
         public void setId(String id) {
             this.id = id;
         }
         public void setModel(String model) {
             this.model = model;
         }
         public void setPeople(PeopleBean people) {
             this.people = people;
         }
    }PeopleBean.class
    package org.Miao.Bean;
    public class PeopleBean {
         private String id;// PEOPLETABLE.PID
         private String name;// PEOPLETABLE.PNAME
         public String getId() {
             return id;
         }
         public String getName() {
             return name;
         }
         public void setId(String id) {
             this.id = id;
         }
         public void setName(String name) {
             this.name = name;
         }
    }
    然后是二者的配置文件:
    PeopleBean.hbm.xml
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="org.Miao.Bean">
         <class name="PeopleBean" table="PEOPLETABLE">
             <id name="id" column="PID">
                 <generator class="native"></generator>
             </id>
             <property name="name" column="PNAME"></property>
         </class>
    </hibernate-mapping>ComputerBean.hbm.xml
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="org.Miao.Bean">
         <class name="ComputerBean" table="COMPUTERTABLE">
             <id name="id" column="CID">
                 <generator class="native"></generator>
             </id>
             <property name="model" column="CMODEL"></property>
             <many-to-one name="people" column="PEOPLE" class="PeopleBean" insert="true" update="true"></many-to-one>
         </class>
    </hibernate-mapping>最后是例子程序主类ORTemp.java
    内容如下:
    package org.Miao;import java.util.List;import org.Miao.Bean.ComputerBean;
    import org.Miao.Bean.PeopleBean;
    import org.hibernate.Session;
    import org.hibernate.Transaction;public class ORTemp {     /**
          * @param args
          */
         public static void main(String[] args) {
             // TODO 自动生成方法存根
             Session session=HibernateSessionFactory.currentSession();
             //查询存在的纪录
             List l;
             l=session.createQuery("from ComputerBean").list();
             System.out.printf("存在的纪录数量:%s\n",l.size());
             //把一个纪录打出来
             ComputerBean computer=(ComputerBean)l.get(0);
             System.out.printf("id:%s,model:%s,people:%s\n",computer.getId(),computer.getModel(),computer.getPeople().getName());
             //添一个新纪录
                 Transaction t=session.beginTransaction();
                 computer=new ComputerBean();
                 computer.setModel("联想天逸");
                 //取出一个已经存在的PEOPLETABLE表纪录
                 PeopleBean people=(PeopleBean)session.load(PeopleBean.class,"1");
                 computer.setPeople(people);
                 session.save(computer);
                 session.flush();
                 t.commit();
                 //保存完成,现在看看有几条纪录
                 l=session.createQuery("from ComputerBean").list();
                 System.out.printf("插入后存在的纪录数量:%s\n",l.size());
             //打印所有纪录
             for(int i=0;i<l.size();i++){
                 ComputerBean tmp=(ComputerBean)l.get(i);
                 System.out.printf("id:%s,model:%s,people:%s\n",tmp.getId(),tmp.getModel(),tmp.getPeople().getName());
             }
             session.close();
         }}