Hibernate 一对多例

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

SQL(数据库使用的MySQL):

CREATE TABLE room (

ROOM_ID int NOT NULL auto_increment,

ADDRESS varchar(32) NOT NULL default '',

PRIMARY KEY (ROOM_ID)

) TYPE=INNODB;

CREATE TABLE user (

USER_ID int NOT NULL auto_increment,

NAME varchar(16) NOT NULL default '',

ROOM_ID int NOT NULL default '',

INDEX (ROOM_ID),

FOREIGN KEY (ROOM_ID) REFERENCES Room(ROOM_ID),

PRIMARY KEY (USER_ID)

) TYPE=INNODB;

User.java

package ivan.hibernate.one2many;

public class User {

private long id;

private String name;

private Room room;

...

}

User.hbm.xml

<hibernate-mapping>

<class name="ivan.hibernate.one2many.User" table="USER">

<id name="id" column="USER_ID" unsaved-value="0">

<generator class="increment"/>

</id>

<property name="name">

<column name="NAME" length="16" not-null="true"/>

</property>

<many-to-one name="room"

column="ROOM_ID"

class="ivan.hibernate.one2many.Room"/>

</class>

</hibernate-mapping>

Room.java

package ivan.hibernate.one2many;

public class Room {

private long id;

private String address;

private Set users = new HashSet();

...

}

Room.hbm.xml

<hibernate-mapping>

<class name="ivan.hibernate.one2many.Room" table="ROOM">

<id name="id" column="ROOM_ID" unsaved-value="0">

<generator class="increment"/>

</id>

<property name="address" type="string"/>

<set name="users" table="USER" inverse="true" cascade="all">

<key column="ROOM_ID"/>

<one-to-many class="ivan.hibernate.one2many.User"/>

</set>

</class>

</hibernate-mapping>

//注意这里需要设定 inverse=true。

Test.java

public class Test {

public static void main(String[] args) throws HibernateException {

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Room room = new Room();

room.setAddress("China-10-911");

User user1 = new User();

user1.setName("ivan");

User user2 = new User();

user2.setName("mada");

user1.setRoom(room);

user2.setRoom(room);

room.getUsers().add(user1);

room.getUsers().add(user2);

Session session = sessionFactory.openSession();

Transaction tx= session.beginTransaction();

session.save(room);

tx.commit();

session.close();

sessionFactory.close();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有