一个学生住在一个宿舍里面,一个宿舍里面住着多个学生。
1.实体关系的建立:
2.据库配置文件
<?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="MulToOne.Room" table="room">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="address"
column="address"
type="java.lang.String"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<hibernate-mapping>
<class name="MulToOne.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<!--这个room值得是User类的room属性-->
<!--这个room_id值得是user表的room_id字段-->
<!--这个class=有点像是type=-->
<!--这个cascade="all",表示user表一变化,则room表也变化,这中间就有user插入一行,room也会增加一行的意思 -->
<many-to-one name="room"
column="room_id"
class="MulToOne.Room"
cascade="all"
outer-join="true"/>
</class>
</hibernate-mapping>
3.在hibernate.hbm.xml中加入两行:
<mapping resource="MulToOne/Room.hbm.xml"/>
<mapping resource="MulToOne/User.hbm.xml"/>
4.测试文件
/*
在下面例子中,只要存取多方就可以了
在Hibernate中是以映射文件中标记上的cascade属性来设定,预设上是 none,以 多对一 中的例子来说, 如果不设定cascade为true,则必须分別对User实例与Room实例进行保存,而不是本例子 中所示的只对User 这一多方进行存储。
如下:
<many-to-one name="room"
column="room_id"
class="MulToOne.Room"
cascade="all"
outer-join="true"/>
*/
class TestRoomUser
{
public static void main(String[] args)
{
TestRoomUser.testSave();
TestRoomUser.testLoad();
}
public static void testSave()
{
Room room1 = new Room();
room1.setAddress("96#");
Room room2 = new Room();
room2.setAddress("94#");
User user1 = new User();
user1.setName("yinbodotcc");
user1.setRoom(room1);
User user2 = new User();
user2.setName("Yang Anyin");
user2.setRoom(room1);
Session session =util.HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
session.save(user1); // 主控方操作,被控方也會對應操作
session.save(user2);
tx.commit();
util.HibernateUtil.getSessionFactory().close();
}
public static void testLoad()
{
Session session =util.HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();//现在的load必须要事务。
User user = (User) session.load(User.class, new Integer(1));//找不到时候,会报异常发生。
if(user!=null)
{
System.out.println(user.getName());
System.out.println(user.getRoom().getAddress());
}
tx.commit();
util.HibernateUtil.getSessionFactory().close();
}
}