给你一个例子吧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;
}
}
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;
}
}
column属性在数据库中指定一个外建指向group表我有hibernate内部精讲教材,有兴趣可以给我写短信
<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();
}这台机器没环境,全部代码手写的,不过应该没错,呵呵。
取缔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方法
}
我觉得刚开始还是用**.hbm.xml好点,映射关系比较容易理解
Hibernate最重要的也就是这个映射关系