Many-To-Many
Relationship:
A logical data relationship in which the value of one data
element can exist in combination with many values of another data element, and
vice versa.
HibernateTest.java
package org.yash.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.yash.dto.UserDetails;
import org.yash.dto.Vehicle;
public class HibernateTest {
public
static void main(String args[]){
UserDetails
user = new UserDetails();
user.setUserName("First
User");
Vehicle
vehicle = new Vehicle();
vehicle.setVehicleName("Car");
Vehicle
vehicle2 = new Vehicle();
vehicle2.setVehicleName("Jeep");
user.getVehicle().add(vehicle);
user.getVehicle().add(vehicle2);
vehicle.getUserList().add(user);
vehicle2.getUserList().add(user);
UserDetails
user2 = new UserDetails();
user2.setUserName("Second
User");
user2.getVehicle().add(vehicle);
user2.getVehicle().add(vehicle2);
vehicle.getUserList().add(user2);
vehicle2.getUserList().add(user2);
SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
Session
session = sessionFactory.openSession();
/*
It is used to save all the objects and to define single unit of work */
session.beginTransaction();
session.save(user);
session.save(vehicle);
session.save(vehicle2);
session.save(user2);
session.getTransaction().commit();
session.close();
}
}
UserDetails.java
package org.yash.dto;
import java.util.ArrayList;
import java.util.Collection;
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="USER_DETAILS")
public class UserDetails {
/* @Id says
"userId" is primary key */
@Id @GeneratedValue
(strategy=GenerationType.AUTO)
private int userId;
private String userName;
@ManyToMany
private
Collection<Vehicle> vehicle = new
ArrayList<Vehicle>();
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String
getUserName() {
return userName;
}
public void
setUserName(String userName) {
this.userName = userName;
}
public void
setVehicle(Collection<Vehicle> vehicle) {
this.vehicle = vehicle;
}
public
Collection<Vehicle> getVehicle() {
return vehicle;
}
}
Vehicle.java
package org.yash.dto;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Vehicle {
@Id @GeneratedValue
private int vehicleId;
private String vehicleName;
@ManyToMany(mappedBy="vehicle")
private
Collection<UserDetails> userList =
new ArrayList<UserDetails>();
public int getVehicleId()
{
return vehicleId;
}
public void setVehicleId(int vehicleId) {
this.vehicleId = vehicleId;
}
public String
getVehicleName() {
return vehicleName;
}
public void
setVehicleName(String vehicleName) {
this.vehicleName = vehicleName;
}
public void
setUserList(Collection<UserDetails> userList) {
this.userList = userList;
}
public
Collection<UserDetails> getUserList() {
return userList;
}
}
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">
org.postgresql.Driver
</property>
<property name="connection.url">
jdbc:postgresql://localhost:5433/hibernatedb
</property>
<property name="connection.username">postgres</property>
<property name="connection.password">admin</property>
<!-- JDBC
connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL
dialect -->
<property name="dialect">
org.hibernate.dialect.PostgreSQLDialect
</property>
<!-- Enable
Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Echo
all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop
and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- create / update -->
<!-- Names the annotated entity
class -->
<mapping class="org.yash.dto.UserDetails"/>
<mapping class="org.yash.dto.Vehicle"/>
</session-factory>
</hibernate-configuration>
No comments:
Post a Comment