hibernate多对一关联映射
来源:百度文库 编辑:神马文学网 时间:2024/09/21 08:45:36
一个学生住在一个宿舍里面,一个宿舍里面住着多个学生。学生是多放,把少反(宿舍)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。这写类的匹配数据库配置文件
/////////////////////////////////////////////////////////
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
column="address"
type="java.lang.String"/>
/////////////////////////////////////////////////////////
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
column="room_id"
class="MulToOne.Room"
cascade="all"
outer-join="true"/>
5。在hibernate.hbm.xml中加入两行:
6。测试文件:
package MulToOne;
import org.hibernate.*;
import org.hibernate.criterion.Expression;
/* 在下面例子中,只要存取多方就可以了
在Hibernate中是以映射文件中標籤上的cascade屬性來設定,預設上是none,以 多對一 中的範例來說,
如果不設定cascade為true,則您必須分別對User實例與Room實例進行儲存,而不是本例子中所示的只对User
这一多方进行存储。
如下:
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
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。这写类的匹配数据库配置文件
/////////////////////////////////////////////////////////
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
type="java.lang.String"/>
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
class="MulToOne.Room"
cascade="all"
outer-join="true"/>
package MulToOne;
import org.hibernate.*;
import org.hibernate.criterion.Expression;
/* 在下面例子中,只要存取多方就可以了
在Hibernate中是以映射文件中標籤上的cascade屬性來設定,預設上是none,以 多對一 中的範例來說,
如果不設定cascade為true,則您必須分別對User實例與Room實例進行儲存,而不是本例子中所示的只对User
这一多方进行存储。
如下:
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多对一关联映射
Eclipse快速上手Hibernate--8. 关联映射(多对多)
Eclipse快速上手Hibernate--7. 关联映射(一对多) (2
Eclipse快速上手Hibernate--7. 关联映射(一对多) (3)
多对多关联映射(双向)
Hibernate对多表关联查询
一对多关联映射(双向)
通过XDoclet(ant)生成Hibernate映射文件
Hibernate配置文件中映射元素详解
Eclipse快速上手Hibernate--2.利用Hbm映射文件开发
Eclipse快速上手Hibernate--4.继承映射(1)
Eclipse快速上手Hibernate--4.继承映射(3)
Hibernate O/R映射三大基本定则
Eclipse快速上手Hibernate--2. 利用Hbm映射文件开发
Eclipse快速上手Hibernate--4. 继承映射(1)
使用MiddleGen产生hibernate的数据库表映射文件
用MiddleGen 产生hibernate的数据库表映射文件
ANT+Xdoclet自动生成Hibernate配置文件\映射文件(正确)
hibernate 映射文件 schema catalog 参数 导致的问题 - Java...
初学者对Hibernate的学习方法
struts2+hibernate+spring配置管理一
Eclipse快速上手Hibernate--2. 利用Hbm映射文件开发 - 分享Java...
在Hibernate中实现复杂的数据映射--java学习资料
Hibernate 中多对多(many-to-many)关系的查询语句