Hibernate Many To Many Insert Operation



We will use following files
User.java
MobilePhone.java
HibernateEngine.java
hibernate.cfg.xml


Queries
CREATE TABLE MOBILE_PHONES_DATA (
PHONE_ID INT PRIMARY KEY AUTO_INCREMENT,
MODEL_NUMBER INT,
MODEL_NAME VARCHAR(20));

CREATE TABLE USERS_DATA (
USER_ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
ADDRESS VARCHAR(35));

CREATE TABLE MOBILE_PHONES_AND_USERS_REL(
MOBILE_PHONE_ID INT,
MOBILE_USER_ID INT,
FOREIGN KEY (MOBILE_PHONE_ID) REFERENCES
MOBILE_PHONES_DATA (PHONE_ID),
FOREIGN KEY (MOBILE_USER_ID) REFERENCES USERS_DATA (USER_ID));

User.java
@Entity
@Table(name="USERS_DATA")

public class User {

@Id
@GeneratedValue

@Column(name="USER_ID")
private int id;

@Column(name="NAME")
private String name;

@Column(name="ADDRESS")
private String address;

//@ManyToMany(targetEntity=MobilePhone.class,mappedBy="users")
@ManyToMany(targetEntity=MobilePhone.class, cascade=CascadeType.ALL)
@JoinTable(name="MOBILE_PHONES_AND_USERS_REL", joinColumns=@JoinColumn(na
me="MOBILE_USER_ID",referencedColumnName="USER_ID"),inverseJoinColumns=@Join
Column(name="MOBILE_PHONE_ID",referencedColumnName="PHONE_ID"))

private Set mobilePhones;

// provide set and get methods for all members
}

MobilePhone.java
@Entity
@Table(name="MOBILE_PHONES_DATA")

public class MobilePhone {

@Id
@GeneratedValue
@Column(name="PHONE_ID")

private int id;

@Column(name="MODEL_NUMBER")
private int modelNumber;

@Column(name="MODEL_NAME")
private String name;

@ManyToMany(targetEntity=User.class,cascade=CascadeType.ALL)
@JoinTable(name="MOBILE_PHONES_AND_USERS_REL",joinColumns=@JoinColumn(na
me="MOBILE_PHONE_ID",referencedColumnName="PHONE_ID"),inverseJoinColumns=@JoinColu
mn(name="MOBILE_USER_ID",referencedColumnName="USER_ID"))

private Set users;

// provide set and get methods for all members
}

hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mydb</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="javafiles.MobilePhone" />
<mapping class="javafiles.User" />
</session-factory>
</hibernate-configuration>

HibernateEngin.java
public class HibernateEngine {

public static void main(String[] javaWorld) {

System.out.println(" ....... ENGINE START ............");
System.out.println(" .. MANY TO MANY ANNOTATION INSERT LESSON ..\n");

Configuration condigurationObj = new Configuration();
condigurationObj.configure("hibernate.cfg.xml");
SessionFactory factoryObj = condigurationObj.buildSessionFactory();
Session sessionObj = factoryObj.openSession();

MobilePhone phoneObj1 = new MobilePhone();
phoneObj1.setModelNumber(10);
phoneObj1.setName("SAMSUNG WOW");

MobilePhone phoneObj2 = new MobilePhone();
phoneObj2.setModelNumber(11);
phoneObj2.setName("SAMSUNG RAYS");

Set<MobilePhone> mobilePhoneSet = new HashSet<MobilePhone>();
mobilePhoneSet.add(phoneObj1);
mobilePhoneSet.add(phoneObj2);

User userObj1 = new User();
userObj1.setName("Steve Jobs");
userObj1.setAddress("Baroda, Alkapuri");

User userObj2 = new User();
userObj2.setName("Bill Gates");
userObj2.setAddress("Bharuch,Narmada Colony");
Set<User> userSet = new HashSet<User>();
userSet.add(userObj1);
userSet.add(userObj2);
phoneObj1.setUsers(userSet);
phoneObj2.setUsers(userSet);

Transaction transaction = sessionObj.beginTransaction();
sessionObj.save(phoneObj1);
sessionObj.save(phoneObj2);
transaction.commit();

System.out.println("\n....... DATA INSERTED SUCCESSFULLY ..........");
sessionObj.close();
factoryObj.close();
System.out.println("\n....... ENGINE STOP ..........");
}
}