下面是一对多双向关联映射,我想问的是在一的一端不写<key column="classesid"></key>
。hibernate在加载对象或保存对象时,能根据Student.hbm.xml映射文件来保存呢package com.bjsxt.hibernate;
 public class Student {
    private int id;
    private String name;
    Classes classes;
    public Classes getClasses() {
       return classes;
    }
    public void setClasses(Classes classes) {
       this.classes = classes;
    }
    public int getId() {
       return id;
    }
    public void setId(int id) {
       this.id = id;
    }
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
 }
2、Classes类的内容不变
package com.bjsxt.hibernate;
 import java.util.Set;
 public class Classes {
    private int id;
    private String name;
    private Set students;
    public Set getStudents() {
       return students;
    }
    public void setStudents(Set students) {
       this.students = students;
    }
       public int getId() {
       return id;
    }
    public void setId(int id) {
       this.id = id;
    }
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
 }
多方的映射
1.Student.hbm.xml
<hibernate-mapping>
   <class name="com.bjsxt.hibernate.Student"  table="t_student">
      <id name="id">
           <!-- 主键的生成方式不能是uuid。因为这种生成方式是生成32位16进制的字符串
              而我们的实体类中id的类型为int.所以要修改主键的生成方式为native.就是以数字形式自增 -->
           <generator class="native"></generator>
       </id>
   <many-to-one name="classes" column="classesid"/>    
    </class>
</hibernate-mapping>
2.Classes.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="com.bjsxt.hibernate">
    <class name="Classes"  table="t_classes">
       <id name="id">
                    <generator class="native"></generator>
       </id>
       <property name="name"/>
       <!-- 上面为简单属性
         下面要看一下集合要如何映射
         答:集合要用set标签来映射
        set标签的名字属性的值就是Classes类中的集合类型数据的变量名 -->
       <set name="students">
          <!-- 那么要如何映射set里面的东西呢?
             我们知道ont2many的映射关系,与many2one的映射是一样的,要在多的一端加字段的。
             但是到目前为止,在t_student这张表里面是没有classid这个字段标识的。
             所以要把这个字段加过来,加过来之后,还要做为外键指向t_classes这张表的主键
             我们用key标签来实现 -->
             <!-- 在key标签里面要使用的属性是列,就是给定在t_student表中的加上的列的名字。
             加了key这个标签后,就会把classid这个字段加入到t_student这张表里面了,
             它做为外键指向t_class表的id字段。 -->
          <key column="classesid"></key>
          <!-- 接下来,采用one-to-many这个标签,采用这个标签,一方面是一对多,
             另一方面,要用class这个属性来指定Classes.java类中的students这个集合里面
             到底是什么元素。我们这个实例里面是Student对象集合。
             一定要指定集合中的元素是什么类型的对象。-->
          <one-to-many class="Student"/>
          <!--ont-to-many标签就代表了students集合里面是Student对象。
          这样指明之后,classes就能找到student这张表。
          因为student在这里都写了。
          而且在Student.hbm.xml文件中,也已经映射Student对象映射到哪张表了。
          这样就可以把classid加到表t_student里面,而且做为外键指向t_classes表的主键id. -->
       </set>
    </class>
</hibernate-mapping>
generatorhibernate