0% found this document useful (0 votes)
65 views19 pages

Java Fast Track: Hibernate - Association Mapping

associationmapping

Uploaded by

rithuik1598
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
65 views19 pages

Java Fast Track: Hibernate - Association Mapping

associationmapping

Uploaded by

rithuik1598
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

Hibernate Association Mapping

Java Fast Track www.javafasttrack.com

Copyright 2010 Purple Desk All Rights Reserved. PurpleDesk.and its logo are Trademarks of Purple Desk.www.javafasttrack.com

Collection Types in Hibernate


Bag A <bag> is an unordered collection, which can contain duplicated elements. That means if you persist a bag with some order of elements, you cannot expect the same order retains when the collection is retrieved. Example public class Category { ... private List subcategory; } <hibernate-mapping package="com.jft.Category"> <class name="Category" table="Category"> ... <bag name="subcategorys" table="Category_subcategory"> <key column="Category_ID" /> <element column="subcategory" type="string" length="100" /> </bag> </class> </hibernate-mapping>

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

Set A <set> is very similar to a <bag>. The only difference is that set can only store unique objects. That means no duplicated elements can be contained in a set. When you add the same element to a set for second time, it will replace the old one. A set is unordered by default but we can ask it to be sorted, public class Category { ... private Set subcategorys; } <hibernate-mapping package="com.jft.Category"> <class name="Category" table="Category"> ... <set name="subcategorys" table="Category_subcategory"> <key column="Category_ID" /> <element column="subcategory" type="string" length="100" /> </set> </class> </hibernate-mapping>
Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

List A <list> is an indexed collection where the index will also be persisted. That means we can retain the order of the list when it is retrieved. It differs from a <bag> for it persists the element index while a <bag> does not. The corresponding type of a <list> in Java is java.util.List. public class Category { ... private List subcategorys; } <hibernate-mapping package="com.jft.Category"> <class name="Category" table="Category"> ... <list name="subcategorys" table="Category"> <key column="Category_ID" /> <list-index column="subcategory_INDEX"/> <element column="subcategory" type="string" length="100" /> </list> </class> </hibernate-mapping>
Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

Array An <array> has the same usage as a <list>. The only difference is that it corresponds to an array type in Java, not a java.util.List. It is seldom used unless we are mapping for legacy applications. public class Category { ... private String[] subcategorys; } <hibernate-mapping package="com.jft.Category"> <class name="Category" table="Category"> ... <array name="subcategorys" table="Category"> <key column="Category_ID" /> <list-index column="subcategory_INDEX"/> <element column="subcategory" type="string" length="100" /> </array> </class> </hibernate-mapping>
Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

Map A <map> is very similar to a <list>. The difference is that a map uses arbitrary keys to index the collection, not an integer index using in a list. public class Category { ... private Map subcategorys; } <hibernate-mapping package="com.jft.Category"> <class name="Category" table="Category"> ... <map name="subcategorys" table="Category_subcategory"> <key column="Category_ID" /> <map-key column="subcategory_KEY" type="string" /> <element column="subcategory" type="string" length="100" /> </map> </class> Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com </hibernate-mapping>

One to One Mapping

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

One to Many Mapping

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

Many to Many Mapping

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

10

create table `jftsampledb`.`category2`( `catid` int not null, `catname` varchar(30), primary key (`catid`) );

create table `jftsampledb`.`subcategory2`( `subcatid` int not null, `subcatname` varchar(50), `catfk` int unique, primary key (`subcatid`) );
Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

11

<hibernate-mapping> <class name="com.jft.demo.Category2" table="category2" catalog="jftsampledb"> <id name="catid" type="java.lang.Integer"> <column name="catid" /> <generator class="assigned" /> </id> <property name="catname" type="java.lang.String"> <column name="catname" length="30" /> </property> <set name="subcategory2s" inverse="true"> <key> <column name="catfk" unique="true" /> </key> <one-to-many class="com.jft.demo.Subcategory2" /> </set> </class> </hibernate-mapping>

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

12

<hibernate-mapping> <class name="com.jft.demo.Subcategory2" table="subcategory2" catalog="jftsampledb"> <id name="subcatid" type="java.lang.Integer"> <column name="subcatid" /> <generator class="assigned" /> </id> <many-to-one name="category2" class="com.jft.demo.Category2" fetch="select"> <column name="catfk" unique="true" /> </many-to-one> <property name="subcatname" type="java.lang.String"> <column name="subcatname" length="50" /> </property> </class> </hibernate-mapping>

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

13

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

14

create table `jfthibernate`.`category`( `CATEGORY_ID` int unsigned not null auto_increment, `NAME` varchar(10) not null, `DESC` varchar(255) not null, primary key (`CATEGORY_ID`) ); create table `jfthibernate`.`stock`( `STOCK_ID` int unsigned not null auto_increment, `STOCK_CODE` varchar(10) not null unique, `STOCK_NAME` varchar(20) not null unique, primary key (`STOCK_ID`) ); create table `jfthibernate`.`stock_category`( `STOCK_CATEGORY_ID` int unsigned not null auto_increment, `STOCK_ID` int unsigned not null, `CATEGORY_ID` int unsigned not null, primary key (`STOCK_CATEGORY_ID`) ); alter table `jfthibernate`.`stock_category` add index `FK_STOCK_CATEGORY_STOCK_ID`(`STOCK_ID`), add constraint `FK_STOCK_CATEGORY_STOCK_ID` foreign key (`STOCK_ID`) references `jfthibernate`.`stock`(`STOCK_ID`);

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

15

<hibernate-mapping> <class name="com.jft.common.Category" table="category" catalog="jfthibernate"> <id name="categoryId" type="java.lang.Integer"> <column name="CATEGORY_ID" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="NAME" length="20" not-null="true" /> </property> <property name="desc" type="string" > <column name="[DESC]" length="255" not-null="true" /> </property> <!-- fetch="select" --> <set name="stockCategories" inverse="true" lazy="true" table="stock_category" > <key> <column name="CATEGORY_ID" not-null="true" /> </key> <one-to-many class="com.jft.common.StockCategory" /> </set> </class> </hibernate-mapping>
Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

16

<hibernate-mapping> <class name="com.jft.common.Stock" table="stock" catalog="jfthibernate"> <id name="stockId" type="java.lang.Integer"> <column name="STOCK_ID" /> <generator class="identity" /> </id> <property name="stockCode" type="string"> <column name="STOCK_CODE" length="10" not-null="true" unique="true" /> </property> <property name="stockName" type="string"> <column name="STOCK_NAME" length="20" not-null="true" unique="true" /> </property> <set name="stockCategories" inverse="true" lazy="true" table="stock_category" > <key> <column name="STOCK_ID" not-null="true" /> </key> <one-to-many class="com.jft.common.StockCategory" /> </set> </class> </hibernate-mapping>

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

17

<hibernate-mapping> <class name="com.jft.common.StockCategory" table="stock_category" catalog="jfthibernate"> <id name="stockCategoryId" type="java.lang.Integer"> <column name="STOCK_CATEGORY_ID" /> <generator class="identity" /> </id> <many-to-one name="stock" class="com.jft.common.Stock" > <column name="STOCK_ID" not-null="true" /> </many-to-one> <many-to-one name="category" class="com.jft.common.Category" <column name="CATEGORY_ID" not-null="true" /> </many-to-one> </class> </hibernate-mapping>

>

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

18

Questions and Comments

Copyright 2010 Purple Desk All Rights Reserved. www.javafasttrack.com

19

You might also like