Many To Many Mapping Using XML
This will also help you to get overall idea of Hibernate many-to-many and many-to-one mapping with detailed example.
many-to-many mapping is to map one class multiple entities to other class multiple entities.
In many-to-many XML mapping, the User and Address class entity are connected in such a way where one user class entity will point to multiple address class entity directly and vice versa.
The fetching of user record can get multiple address records and at the same time fetching of address record can get multiple user records from the database.
This article will give you an overall idea on how many-to-many hibernate XML works. It will also help you to answer most of the practical interview questions.
As part of this discussion, we will be creating sample Hibernate program to select, insert and delete data in MySQL database.
Pre requisite before starting hibernate development is to have Java, MySQL and Eclipse installed in local.
Below Example will help to create Hibernate project using Eclipse to insert data in MySQL database.
- Let’s create a maven project using Eclipse.
Click on File in top navigation and select New and than click on maven Project.
File → New → Maven Project
Below window will appear, no changes are required and click on Next
2. Wait for sometime or archetype to get appear on screen. Select below highlighted archetype Artifact Id as maven-archetype.quickstart and Group Id as org.apache.maven.archetypes.
click on Next after below inline selection.
3. provide the Group Id and Artifact Id as mentioned below. Click on Next.
4. Copy paste below dependencies for hibernate and mysql under dependencies section in pom.xml.
5. Create resource folder under below highlighted hierarchy.
Very important Step:
right click select Build Path option and than select Use as Source Folder.
7. Create user.hbm.xml file to provide mapping of User class and usr MySQL table as shown below at liner number 6.
Create mapping for class variables and table columns.
It will also require to create a mapping of User.java class with Address.java as highlighted below red in color.
<hibernate-mapping> contains all bean class mappings.
<class> create mapping in between class and table. name attribute value represents to class name and table attribute value represents to MySQL table name.
<property> represents to class declare class level variable. name attribute value represents to class level variable and type represents to data type of that variable.
<column> represents to column MySQL table. name attribute value represents to column name.
<id> represents to unique ID attribute in class map to the primary key of the database table.
<generator> this helps to generate unique id for given column.
<many-to-many> will help us to create many-to-many mapping in between User and Address class.
8. Create address.hbm.xml file to provide mapping of Address class and address_tables MySQL table as shown below at liner number 6.
Create mapping for class variables and table columns.
9. Create hiernate.cfg.xml file to provide info related to database connection as mentioned below.
Load user.hbm.xml and address.hbm.xml file using mapping tag as mentioned at line number 25 and 26.
10. There are two sub steps which need to be follow to execute above code:
First Step
Write below statement in hibernate.cfg.xml to create table and data in the database for first time.
<property name=”hbm2ddl.auto”>create</property>
Please go back to MySQL and check if both the tables got created in MySQL with name address_tabless and user_tables.
Please run below Java code and it will create table and data in the database.
Run Java main method in App.java class.
OUTPUT:
Second Step
Write below statement in hibernate.cfg.xml to fetch and delete data from database.
<property name=”hbm2ddl.auto”>update</property>
In App.java comment code mentioned below highlighted in red and uncomment or write statements highlighted in green color.
Re-run Java main method in App.java class.
OUTPUT:
Imran Khan, Adobe Community Advisor, AEM certified developer and Java Geek, is an experienced AEM developer with over 11 years of expertise in designing and implementing robust web applications. He leverages Adobe Experience Manager, Analytics, and Target to create dynamic digital experiences. Imran possesses extensive expertise in J2EE, Sightly, Struts 2.0, Spring, Hibernate, JPA, React, HTML, jQuery, and JavaScript.