Hibernate中one-to-many/many-to-one和many-to-many

<1>one-to-many/many-to-one

(1)表结构

/**客户表**/
create table CUSTOMERS(
ID int not null auto_increment,
Name varchar(15),
primary key(ID)
);

/**订单表**/
create table ORDERS(
ID bigint not null auto_increment,
ORDER_NUMBER varchar(15),
CUSTOMER_ID int not null,
primary key(ID),
foreign key (CUSTOMER_ID) references CUSTOMERS(ID)
);

(2)Customers.hbm.xml

<set 
	name="Orders" 
	inverse="true"
	lazy="false"
	cascade="all"> 
       <key column="CUSTOMER_ID"/>
       <one-to-many class="Orders"/>
</set>


说明:inverse="true",Customers端无须维护这个关联关系。也就是当Customers对象变化时,不用同步更新它的关联的Orders(Orders这端的inverse="false",表明由它来维护关系),这样避免双方重复更新同一关系。

(3)Orders.hbm.xml

<many-to-one
	name="Customer"
	column="CUSTOMER_ID"
	class="Customers"
	not-null="true"
	>
</many-to-one>


<2>many-to-many

(1)表结构

create table AUTHORIZATION(
ID bigint(20) not null auto_increment,
AUTH int(11),
AUTHORIZE int(11),
PRIMARY KEY (ID)
);

create table USR(
ID bigint(20) not null auto_increment,
NAME varchar(16),
PRIMARY KEY (ID)
);

/**双向关联的中间连接表**/
create table USERAUTH(
ID bigint(20) not null auto_increment,
USER_ID bigint(20),
AUTH_ID bigint(20),
PRIMARY KEY (ID)
);

(2)Authorization.hbm.xml

<set name="users"
     table="userauth"
     inverse="false"
     cascade="all">
	<key column="AUTH_ID"/>
	<many-to-many class="Usr" column="USER_ID"/>
</set>


(3)Usr.hbm.xml

<set name="auths"
     table="userauth"
     cascade="all"
     inverse="true"><!--由Authorization一端来维护关系-->
         <key column="USER_ID"/>
	<many-to-many class="Authorization" column="AUTH_ID"/>
</set>


说明:多对多关系,通过一个中间连接表,分离成了两个一对多关系。

测试:
		Usr userA = new Usr();
		Usr userB = new Usr();
		userA.setName("jinming");
		userB.setName("genghua");
		
		Authorization auth1 = new Authorization();
		Authorization auth2 = new Authorization();
		auth1.setAuth(0);
		auth1.setAuth(10);
		auth2.setAuth(1);
		auth2.setAuthorize(11);

		Set<Authorization> set1 = new HashSet<Authorization>();
		set1.add(auth1);
		set1.add(auth2);
		userA.setAuths(set1);
		userB.setAuths(set1);

		Set<Usr> set2 = new HashSet<Usr>();
		set2.add(userA);
		set2.add(userB);
		auth1.setUsers(set2);
		auth2.setUsers(set2);
		
		userDao.save(userA);
		userDao.save(userB);

你可能感兴趣的:(java,xml,Hibernate)