现在我有两张表  student和teacher
一个teacher对应多个学生
class Student(
private int id;
private String name;
private Teacher teacher;
getter()和Setter()方法。
)
class Teacher(
private int id;
private String name;
getter()和Setter()方法。
我在hmb.xml中 这样配置
<class name="com.accp.hibernaate.vo.Teacher" table="tb_teacher">
<id name="tid" >
<generator class="native"></generator>
</id>
<property name="tname"></property>

</class>
<class name="com.accp.hibernaate.vo.Student" table="tb_student">
<id name="studentid" >
<generator class="native"></generator>
</id>
<property name="sname"></property>
<property name="sex"></property>

<many-to-one name="teacher" column="tid"></many-to-one>
</class>然后生成表格  我就能得到   teacher_id 和student_tid   这样的一个多对一的关系我的疑问是:  我在配置中。特别是student的配置中   并没有明确的指出  teacher_id 和student_tid是对应    为什么两者能够联系起来? 

解决方案 »

  1.   

    是因为  private Teacher teacher   这个变量  所以两者才能连接起来的吗?
      

  2.   

    这个我学的时候确实有点绕  你这里是配置的单向的,
    <many-to-one name="teacher" column="tid"></many-to-one>  这一句就是student引用teacher的外键,name=teacher,teacher是java文件里面的定义变量,代表的是数据库里面的tid字段
      

  3.   

    你配置文件里配置了所以关联了
    <many-to-one name="teacher" column="tid"></many-to-one>
      

  4.   

    确实配置的是 单向多对一的关系   我总是感觉 奇怪了一点  就是  我在XML文件里面  之看到了主键的确定  没有看到   主外键的关联    刚才想到 会不会是因为我在VO里面  定义了teacher类型的一个变量  所以两者才关联起来的   在HBM.XML里面  确实找不到  两张表关联的证据
      

  5.   

      
    我的意思是  不过是name属性  还是column  属性   如果你单独来看   这个many-to-one  这个标签的配置  你能够知道   是跟那张表 发生的关联吗?   甚至这么说吧   如果单独给你   student.hbm.xml 这个文件  你知道  是跟teacher这张表  发生的关联吗?
      

  6.   

    name=teacher这个就是在student.java里面引用teacher类的对象,两张表就关联了, 在数据库里面的student表的tid对应得就是teacher表的主键   
      

  7.   

    我还是觉得  是不是需要跟VO联系起来看   teacher这个属性   标识是name   只是一个名称   并不是class  不能明确 是teacher  这张表吧
      

  8.   

    你给出的例子里,name指的是private Teacher teacher这一句里的teacher,然后hibernate再根据Teacher找其对应的表。