一个学生住在一个宿舍里面,一个宿舍里面住着多个学生。学生是多放,把少反(宿舍)primary key放入。
1。数据库的建立:
CREATE TABLE room ( id INT(11) NOT NULL auto_increment PRIMARY KEY, address VARCHAR(100) NOT NULL default '' ); CREATE TABLE user (
id INT(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(100) NOT NULL default '', room_id INT(11) ); 2。映射类的建立:
package MulToOne; /////////////////////////////////////////////////////////////////
public class Room { private Integer id; private String address; public Room() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } /////////////////////////////////////////////////////////////////
package MulToOne; public class User {
private Integer id; private String name; private Room room; public User() {
} public Integer getId() {
return id; } public void setId(Integer id) {
this.id = id; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public Room getRoom() {
return room; } public void setRoom(Room room) {
this.room = room; } } 3。这写类的匹配数据库配置文件
///////////////////////////////////////////////////////// <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate./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./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>
5。在hibernate.hbm.xml中加入两行:
<mapping resource="MulToOne/Room.hbm.xml"/> <mapping resource="MulToOne/User.hbm.xml"/> 6。测试文件:
package MulToOne; import org.hibernate.*; import org.hibernate.criterion.Expression; /* 在下面例子中,只要存取多方就可以了
在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(); } } 说明的是,这里的util.HibernateUtil类,在以前的Hibernate学习中已经给出过,SessionFactory的获取方法为: sessionFactory = new Configuration().configure().buildSessionFactory(); 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yinbodotcc/archive/2007/02/08/1505445.aspx
|
|
来自: 连元武 > 《hibernate》