Many To Many Mapping Using Annotation
This blog will also help you to get overall idea of Hibernate one-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 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 annotation 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.java file to provide mapping of User class and MySQL user_tables table.
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.
Important Note:
@JoinTable(name = “user_tables_address_tabless”,
joinColumns = { @JoinColumn(name = “user_userId”) },
inverseJoinColumns = { @JoinColumn(name = “address_id”) })
Above code written in User.java class will create one more table with name user_tables_address_tabless to maintain mapping in between user_tables and address_tabless table class as shown below.
@Entity is to convert bean in to an entity.
@Table annotation helps us to map current bean as table. name attribute help us to map bean class name with MySQL table name. name attribute is not required if class name and table name is same.
@Column annotation helps to map class variable and MySQL column name.
@id represents to unique ID attribute in class map to the primary key of the database table.
@GenerateValue helps to generate unique id for given column.
@ManyToMany will map multiple User with multiple Address entity and vice versa.
8. Create Address.java file to provide mapping of Address class and address_tabless MySQL table.
9. Create hiernate.cfg.xml file to provide info related to database connection as mentioned below.
Load User.java and Address.java file using mapping tag as mentioned at line number 25 and 26.
10. Below code written App.java main method class. This class will help to load Hibernate configuration and Hibernate config with load User hbm file where we have written User class variable and column mapping.
Below code snippet will help us to get and delete record in user and address table.
There are two steps to follow:
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.
If table didn’t get create, please run below script in MySQL editor or command prompt.
create table user_table(userId int NOT NULL AUTO_INCREMENT, firstName varchar(20), lastName varchar(20), age int, primary key(userid));
create table address_tables(id int NOT NULL PRIMARY KEY, addressline varchar(20), city varchar(20), pincode int);
Please run below Java code and it will create table and data in the database.
Second Step
Write below statement in hibernate.cfg.xml to fetch and delete data from database.
<property name=”hbm2ddl.auto”>update</property>
Please run below Java code and it will fetch and delete data from database.
Re-run the program again below print below output.
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.