Hibernate Many to Many Mapping

Relationship Diagram
Project Structure

File Name
Use
Language.java
Pojo class for Language.
Person.java
Pojo class for Person.
Language.hbm.xml
Mappings file for Language class.
Person.hbm.xml
Mappings file for Person class.
hibernate.cfg.xml
Hibernate Configuration File.
Main.java
It will control the overall process.


Language.java
package manyToMany.simple;

public class Language
{
private long langId;
private String langName;

public Language() { }  //no argument constructor
public Language(String langName) {
this.langName = langName;
}

public long getLangId() {
return langId;
}
public void setLangId(long langId) {
this.langId = langId;
}
public String getLangName() {
return langName;
}
public void setLangName(String langName) {
this.langName = langName;
}
}


Person.java
package manyToMany.simple;

import java.util.HashSet;
import java.util.Set;

public class Person
{
private long personId;
private String personName;
private Set<Language> languages = new HashSet<Language>(0);

public Person() {}  //no argument constructor

public long getPersonId() {
return personId;
}
public void setPersonId(long personId) {
this.personId = personId;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public Set<Language> getLanguages() {
return languages;
}
public void setLanguages(Set<Language> languages) {
this.languages = languages;
}
}


Language.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="manyToMany.simple.Language" table="LANGUAGE">
<id name="langId" type="long" column="LANG_ID">
<generator class="native"/>
</id>
<property name="langName" type="string" column="LANG_NAME"/>
</class>
</hibernate-mapping>


Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="manyToMany.simple.Person" table="Person">
        <id name="personId" type="long" column="PERSON_ID">
            <generator class="native" />
        </id>
        <property name="personName" type="string" length="100" not-null="true" column="PERSON_NAME" />
        <set name="languages" table="PERSON_LANGUAGE" cascade="all">
            <key column="PERSON_ID" />
            <many-to-many column="LANGUAGE_ID"  class="manyToMany.simple.Language" />
        </set>
    </class>
</hibernate-mapping>


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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/mydb</property>
<property name="hibernate.connection.username">root</property>
<property name="connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="show_sql">true</property>
        <mapping resource="manyToMany/simple/Person.hbm.xml"/>
        <mapping resource="manyToMany/simple/Language.hbm.xml"/>
    </session-factory>
</hibernate-configuration>


Main.java
package manyToMany.simple;

import java.util.HashSet;
import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Main 
{
public static void main(String[] args) 
{
Configuration config = new Configuration().configure("manyToMany\\simple\\hibernate.cfg.xml");
SessionFactory myFactory = config.buildSessionFactory(); 
Session session = myFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
Set<Language> languages = new HashSet<Language>();
languages.add(new Language("English"));
languages.add(new Language("Hindi"));
Person person = new Person();
person.setPersonName("Hemant Kumar");
person.setLanguages(languages);
session.save(person);
transaction.commit();
catch(HibernateException e) {
transaction.rollback();
e.printStackTrace();
finally {
session.close();
}
}
}

Comments

Popular posts from this blog

Index MySQL datadase table in Solr

Hibernate Sharding Example

Shallow Copy