关于hibernate中的表关系 !求大神详解
现在我有两张表 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是对应 为什么两者能够联系起来? --------------------编程问答-------------------- 是因为 private Teacher teacher 这个变量 所以两者才能连接起来的吗? --------------------编程问答-------------------- 这个我学的时候确实有点绕 你这里是配置的单向的,
<many-to-one name="teacher" column="tid"></many-to-one> 这一句就是student引用teacher的外键,name=teacher,teacher是java文件里面的定义变量,代表的是数据库里面的tid字段 --------------------编程问答-------------------- 你配置文件里配置了所以关联了
<many-to-one name="teacher" column="tid"></many-to-one>
--------------------编程问答-------------------- 确实配置的是 单向多对一的关系 我总是感觉 奇怪了一点 就是 我在XML文件里面 之看到了主键的确定 没有看到 主外键的关联 刚才想到 会不会是因为我在VO里面 定义了teacher类型的一个变量 所以两者才关联起来的 在HBM.XML里面 确实找不到 两张表关联的证据 --------------------编程问答--------------------
我的意思是 不过是name属性 还是column 属性 如果你单独来看 这个many-to-one 这个标签的配置 你能够知道 是跟那张表 发生的关联吗? 甚至这么说吧 如果单独给你 student.hbm.xml 这个文件 你知道 是跟teacher这张表 发生的关联吗? --------------------编程问答--------------------
name=teacher这个就是在student.java里面引用teacher类的对象,两张表就关联了, 在数据库里面的student表的tid对应得就是teacher表的主键 --------------------编程问答-------------------- 我还是觉得 是不是需要跟VO联系起来看 teacher这个属性 标识是name 只是一个名称 并不是class 不能明确 是teacher 这张表吧 --------------------编程问答-------------------- 你给出的例子里,name指的是private Teacher teacher这一句里的teacher,然后hibernate再根据Teacher找其对应的表。
补充:Java , Java EE