即在一方的表中的一个外键参照另一张表的主键。通过在多方持有一方的引用实现,需要在多方使用<many-to-one/> 配置。
首先在多方的实体类中定义一个多方的引用。依然以上篇中的Student类为例
//多方中定义一个一方的引用,并添加其setter和getter private Grade grade;
然后修改其映射文件。
<?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"> <hibernate-mapping> <class name="com.xiaoyin.entity.Student" table="student"> <id name="sid" column="sid" type="java.lang.Integer"> <generator class="increment"/> </id> <property name="sname" type="java.lang.String"> <column name="sname" length="20" not-null="true"/> </property> <property name="sex" type="java.lang.String"> <column name="sex"/> </property> <!-- 配置多对一关联关系 --> <!-- 这里指定了三个属性,第一个name为多方实体类中的属性名 第二个class为属性所对应的实体类,第三个column则是表示 其外键对应的列名 --> <many-to-one name="grade" class="com.xiaoyin.entity.Grade" column="gid"/> </class> </hibernate-mapping>
以下是多对一关系测试类
import com.xiaoyin.entity.Grade; import com.xiaoyin.entity.Student; import com.xiaoyin.util.HibernateUtil; import org.hibernate.Session; import org.hibernate.Transaction; /** * 测试单向的多--》》一(学生--班级) */ public class TestMany2One { public static void main(String[] args){ save(); } public static void save(){ Grade grade=new Grade("python学习1班","软件开发一班"); Student stu1=new Student("慕课网","女"); Student stu2=new Student("Coursa","男"); //设置关联关系 stu1.setGrade(grade); stu2.setGrade(grade); Session session= HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); session.save(grade); session.save(stu1); session.save(stu2); tx.commit(); HibernateUtil.closeSession(session); } }