Hibernate-10 - Many To Many Mapping
Hibernate-10 - Many To Many Mapping
Many to many mapping means that multiple rows in a table can be mapped to
multiple rows in another table.
Id(PK) Id(PK)
Name Name
User_Nominee table
User_id(FK)
Nominee_id(FK)
User.Java
package com.test;
import java.util.*;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private int id;
@Column(name = "name")
private String name;
@Column(name = "email")
private String email;
}
Nominee.Java
package com.test;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "nominee")
public class Nominee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "nominee_id")
private int id;
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "nomineeList")
private List<User> userList = new ArrayList<User>();
}
Test.Java
package com.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
SessionFactory sessionFactory =
configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction t= session.beginTransaction();
nominee1.getUserList().add(user1);
nominee2.getUserList().add(user1);
nominee3.getUserList().add(user1);
user2.getNomineeList().add(nominee2);
user2.getNomineeList().add(nominee3);
nominee2.getUserList().add(user2);
nominee3.getUserList().add(user2);
session.persist(user1);
session.persist(user2);
t.commit();
session.close();
sessionFactory.close();
}
}
Hibernate.cfg.xml
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</proper
ty>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/sample</pr
operty>
<property
name="hibernate.connection.username">root</property>
<property
name="hibernate.connection.password">root</property>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">create</property>
<property name="show_sql">true</property>
<mapping class="com.test.User"></mapping>
<mapping class="com.test.Nominee"></mapping>
</session-factory>
</hibernate-configuration>
Pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>map</groupId>
<artifactId>ManytoManyMapping</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
</project>
Output
User table
Nominee table
User_Nominee table