给你一个例子吧mysql
create table student(
sid int auto_increment primary key,
name varchar(32) not null,
age int,
sex varchar(2) not null
);create table course(
cid int auto_increment primary key,
name varchar(32) not null,
teacher varchar(20) not null,
creditHour int
);create table student_course(
sid int,
cid int,
foreign key (sid) references student(sid),
foreign key(cid) references course(cid)
);Student.hbm.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.shdemo.vo.Student" table="student" catalog="mldn">
        <id name="sid" type="java.lang.Integer">
            <column name="sid" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="32" not-null="true" />
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age" />
        </property>
        <property name="sex" type="java.lang.String">
            <column name="sex" length="2" not-null="true" />
        </property>
        <set name="courses" inverse="true" cascade="all" table="student_course">
            <key>
                <column name="sid" />
            </key>
            <many-to-many class="com.shdemo.vo.Course" column="cid" />
        </set>
        <set name="cids" table="student_course" cascade="all">
         <key>
         <column name="sid"></column>
         </key>
         <element type="java.lang.Integer" column="cid"></element>
        </set>
    </class>
</hibernate-mapping>
Course.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.shdemo.vo.Course" table="course" catalog="mldn">
        <id name="cid" type="java.lang.Integer">
            <column name="cid" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="32" not-null="true" />
        </property>
        <property name="teacher" type="java.lang.String">
            <column name="teacher" length="20" not-null="true" />
        </property>
        <property name="creditHour" type="java.lang.Integer">
            <column name="creditHour" />
        </property>
        <set name="students" inverse="true" table="student_course">
            <key>
                <column name="cid" />
            </key>
            <many-to-many class="com.shdemo.vo.Student" column="sid" />
        </set>
        <set name="sids" table="student_course" cascade="all">
         <key>
         <column name="cid"></column>
         </key>
         <element type="java.lang.Integer" column="sid"></element>
        </set>
    </class>
</hibernate-mapping>Student.java
import java.util.Set;public class Student {
private int sid;
private String name;
private int age;
private String sex;
private Set Courses;
private Set cids;

public Set getCids() {
return cids;
}
public void setCids(Set cids) {
this.cids = cids;
}
public Set getCourses() {
return Courses;
}
public void setCourses(Set courses) {
Courses = courses;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
}Course.javaimport java.util.Set;public class Course {
private int cid;
private String name;
private String teacher;
private int creditHour;
private Set Students;
private Set sids;

public Set getStudents() {
return Students;
}
public void setStudents(Set students) {
Students = students;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public int getCreditHour() {
return creditHour;
}
public void setCreditHour(int creditHour) {
this.creditHour = creditHour;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public Set getSids() {
return sids;
}
public void setSids(Set sids) {
this.sids = sids;
}

}

解决方案 »

  1.   

    一般先建立对象模型,user和group为多对一模型,user对象含有一个group的引用配置文件就要使用<many-to-one name = "group" column = "group_id">name属性和user类中的group应用同名
    column属性在数据库中指定一个外建指向group表我有hibernate内部精讲教材,有兴趣可以给我写短信
      

  2.   

    从楼主提供的信息来看,这是many-to-many,其一般形式如下
    <set name="本类属性" table="关系表">
    <key column="关系表中与本类主键对应的列" />
    <many-to-many column="关系表中与关联类主键对应的列" class="关联类的类型" />
    </set>假设userid与groupid是整数,且是标识列,则相关代码如下:User.java
    package entity;public class User implements java.io.Serializable
    {
    private int userId;
    private String name;
    private Set<Group> groups = new HashSet<Group>();

    // getters & setters
    }Group.java
    package entity;public class Group implements java.io.Serializable
    {
    private int groupId;
    private String name;
    private Set<User> users = new HashSet<User>();

    // getters & setters
    }Entity.hbm.xml(映射文件)
    <hibernate-mapping package="entity"> <class name="User" table="users" >

    <id name="userId" column="userid" type="int">
    <generator class="native"/>
    </id>

    <property name="name" column="name" type="java.lang.String" />

    <set name="groups" table="users_groups" fatch="join" >
    <key column="userid">
    <many-to-many column="groupid" class="Group" />
    </set>

    </class>

    <class name="Group" table="group" >

    <id name="groupId" column="groupid" type="int">
    <generator class="native"/>
    </id>

    <property name="name" column="name" type="java.lang.String" />

    <set name="users" table="users_groups" fatch="join" inverse="true" >
    <key column="groupid">
    <many-to-many column="userid" class="User" />
    </set>

    </class>

    </hibernate-mapping>
    这样,你在查User时,Hibernate会自动把对应的Group给你查出来的。User u = session.get( User.class, 1 );
    if( u == null )
    {
    System.out.println( "对不起!没有编号为1的用户。" );
    }
    else
    {
    System.out.println( "用户名:" + u.getName() );
    System.out.println( "所属组:" );
    for(Group g : u.getGroups() )
    {
    System.out.print( g.getName() + "\t" );
    }
    System.out.println();
    }这台机器没环境,全部代码手写的,不过应该没错,呵呵。
      

  3.   

    如果是学习,为何还要配置hbm.xml,annotation已经出这么长时间了,hibernate早就对其有了实现
    取缔xml,早晚的事。给你个user--role的多对多的基于annotation的例子,让hbm.xml向中国网通一样,推出历史舞台吧import java.io.Serializable;
    import java.util.Collection;
    import javax.persistence.*;@Entity
    @Table(name = "Users")
    public class User implements Serializable {
        @Id
        @Column(name = "id", nullable = false)
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        @Column(name = "name")
        private String name;
        @JoinTable(name = "UserRoles", joinColumns = {@JoinColumn(name = "userId", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "roleId", referencedColumnName = "id")})
        @ManyToMany(cascade = CascadeType.ALL)
        private Collection<Role> roleIdCollection;
        //get/set方法
    }
    ///////////////////////////////////////////////////////////////////////////////////
    import java.io.Serializable;
    import java.util.Collection;
    import javax.persistence.*;@Entity
    @Table(name = "Roles")
    public class Role implements Serializable {
        @Id
        @Column(name = "id", nullable = false)
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        @Column(name = "name")
        private String name;
        @ManyToMany(mappedBy = "roleIdCollection")
        private Collection<User> userIdCollection;   
        //get/set方法
    }
      

  4.   


    我觉得刚开始还是用**.hbm.xml好点,映射关系比较容易理解
    Hibernate最重要的也就是这个映射关系