Bag in collection:
A bag is a java collection which can contain duplicate elements without caring about sequence element. We can get the information like the number of times an object appears in the collection by using bag.
Bag works like a list without index (you don’t know what is the order of elements), so it’s similar to Set with duplicates.
Difference between list and bag.
- In case of list sequence element is needed. In case of bag no need of sequence element.
When to use Bag
Bags are useful when you add an element to an uninitialized big collection, it avoids the collection to be loaded.
Bag mapping:
If an entity has a list of values for a property then this property can be mapped by using <bag> element. A bag is initialized with java.util.ArrayList.
Example:
Student.java
import java.util.Collection; /** * This class represents a persistent class for Student. * @author w3schools */ public class Student { //data members private int studentId; private String firstName; private String lastName; private String className; private String rollNo; private int age; private Collection subjects; //no-argument constructor public Student(){ } //argument constructor public Student(String firstName, String lastName, String className, String rollNo, int age){ this.firstName = firstName; this.lastName = lastName; this.className = className; this.rollNo = rollNo; this.age = age; } //getter and setter methods public int getStudentId() { return studentId; } public void setStudentId(int studentId) { this.studentId = studentId; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String getRollNo() { return rollNo; } public void setRollNo(String rollNo) { this.rollNo = rollNo; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Collection getSubjects() { return subjects; } public void setSubjects(Collection subjects) { this.subjects = subjects; } } |
Subject.java
/** * This class represents a persistent class for Subject. * @author w3schools */ public class Subject { //data members private int subjectId; private String subjectName; //no argument constructor public Subject(){ } //argument constructor public Subject(String subjectName){ this.subjectName = subjectName; } //getter and setter methods public int getSubjectId() { return subjectId; } public void setSubjectId(int subjectId) { this.subjectId = subjectId; } public String getSubjectName() { return subjectName; } public void setSubjectName(String subjectName) { this.subjectName = subjectName; } } |
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.OracleDialect </property> <property name="connection.url"> jdbc:oracle:thin:@localhost:1521:XE </property> <property name="connection.username"> system </property> <property name="connection.password"> oracle </property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <property name="hbm2ddl.auto"> update </property> <property name="show_sql"> true </property> <mapping resource="student.hbm.xml"/> <mapping resource="subject.hbm.xml"/> </session-factory> </hibernate-configuration> |
student.hbm.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.w3schools.business.Student" table="Student"> <id name="studentId" type="int" column="Student_Id"> <generator class="native"></generator> </id> <property name="firstName" column="First_Name" type="string"/> <property name="lastName" column="Last_Name" type="string"/> <property name="className" column="Class" type="string"/> <property name="rollNo" column="RollNo" type="string"/> <property name="age" column="Age" type="int"/> <bag name="subjects" cascade="all"> <key column="Student_Id"/> <one-to-many class="com.w3schools.business.Subject"/> </bag> </class> </hibernate-mapping> |
subject.hbm.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.w3schools.business.Subject" table="Subject"> <id name="subjectId" type="int" column="Subject_Id"> <generator class="native"></generator> </id> <property name="subjectName" column="Subject_Name" type="string"></property> </class> </hibernate-mapping> |
HibernateUtil.java
import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * This is a utility class for getting the hibernate session object. * @author w3schools */ public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { SessionFactory sessionFactory = null; try { //Create the configuration object. Configuration configuration = new Configuration(); //Initialize the configuration object //with the configuration file data configuration.configure("hibernate.cfg.xml"); // Get the SessionFactory object from configuration. sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { e.printStackTrace(); } return sessionFactory; } public static SessionFactory getSessionFactory() { return sessionFactory; } } |
HibernateTest.java
import java.util.ArrayList; import com.w3schools.persistence.StudentDBOperations; /** * This class is used for the hibernate operations. * @author w3schools */ public class HibernateTest { public static void main(String args[]){ ArrayList subjectList1 = new ArrayList(); subjectList1.add(new Subject("Data Structure")); subjectList1.add(new Subject("Operting System")); ArrayList subjectList2 = new ArrayList(); subjectList2.add(new Subject("Compier")); subjectList2.add(new Subject("Networking")); subjectList2.add(new Subject("DBMS")); //Create the student object. Student student1 = new Student("Bharat", "Jaiswal", "MCA final", "MCA/07/72", 27); Student student2 = new Student("Sahdev", "Gorila", "MCA final", "MCA/07/73", 32); student1.setSubjects(subjectList1); student2.setSubjects(subjectList2); StudentDBOperations obj = new StudentDBOperations(); //insert student object. obj.addStudent(student1); obj.addStudent(student2); //show all student object. obj.showAllStudentDetails(); } } |
StudentDBOperations.java
import java.util.List; import java.util.Set; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; import com.w3schools.business.Student; import com.w3schools.business.Subject; /** * This class contains the methods to interact with database. * @author w3schools */ public class StudentDBOperations { /** * This method is used to insert a new student record. * @param student * @return studentId * @author w3schools */ public Integer addStudent(Student student){ Transaction tx = null; Integer studentId = null; //Get the session object. Session session = HibernateUtil.getSessionFactory().openSession(); try{ tx = session.beginTransaction(); studentId = (Integer) session.save(student); tx.commit(); }catch (HibernateException e) { if(tx!=null){ tx.rollback(); } e.printStackTrace(); }finally { session.close(); } return studentId; } /** * This method is used retrieve and show the records. * @author w3schools */ public void showAllStudentDetails(){ Transaction tx = null; //Get the session object. Session session = HibernateUtil.getSessionFactory().openSession(); try{ tx = session.beginTransaction(); List<Student> students = session.createQuery("FROM Student").list(); for(Student student : students){ System.out.println("First Name: " + student.getFirstName()); System.out.println("Last Name: " + student.getLastName()); System.out.println("Class: " + student.getClassName()); System.out.println("RollNo: " + student.getRollNo()); System.out.println("Age: " + student.getAge()); Collection<Subject> subjects = student.getSubjects(); for(Subject subject : subjects){ System.out.println("Subject Name:" + subject.getSubjectName()); } } tx.commit(); }catch (HibernateException e) { if(tx!=null){ tx.rollback(); } e.printStackTrace(); }finally { session.close(); } } } |
Output:
Hibernate: select hibernate_sequence.nextval from dual Hibernate: select hibernate_sequence.nextval from dual Hibernate: select hibernate_sequence.nextval from dual Hibernate: insert into Student (First_Name, Last_Name, Class, RollNo, Age, Student_Id) values (?, ?, ?, ?, ?, ?) Hibernate: insert into Subject (Subject_Name, Subject_Id) values (?, ?) Hibernate: insert into Subject (Subject_Name, Subject_Id) values (?, ?) Hibernate: update Subject set Student_Id=? where Subject_Id=? Hibernate: update Subject set Student_Id=? where Subject_Id=? Hibernate: select hibernate_sequence.nextval from dual Hibernate: select hibernate_sequence.nextval from dual Hibernate: select hibernate_sequence.nextval from dual Hibernate: select hibernate_sequence.nextval from dual Hibernate: insert into Student (First_Name, Last_Name, Class, RollNo, Age, Student_Id) values (?, ?, ?, ?, ?, ?) Hibernate: insert into Subject (Subject_Name, Subject_Id) values (?, ?) Hibernate: insert into Subject (Subject_Name, Subject_Id) values (?, ?) Hibernate: insert into Subject (Subject_Name, Subject_Id) values (?, ?) Hibernate: update Subject set Student_Id=? where Subject_Id=? Hibernate: update Subject set Student_Id=? where Subject_Id=? Hibernate: update Subject set Student_Id=? where Subject_Id=? Hibernate: select student0_.Student_Id as Student1_0_, student0_.First_Name as First2_0_, student0_.Last_Name as Last3_0_, student0_.Class as Class0_, student0_.RollNo as RollNo0_, student0_.Age as Age0_ from Student student0_ First Name: Bharat Last Name: Jaiswal Class: MCA final RollNo: MCA/07/72 Age: 27 Hibernate: select subjects0_.Student_Id as Student3_1_, subjects0_.Subject_Id as Subject1_1_, subjects0_.Subject_Id as Subject1_1_0_, subjects0_.Subject_Name as Subject2_1_0_ from Subject subjects0_ where subjects0_.Student_Id=? Subject Name:Data Structure Subject Name:Operting System First Name: Sahdev Last Name: Gorila Class: MCA final RollNo: MCA/07/73 Age: 32 Hibernate: select subjects0_.Student_Id as Student3_1_, subjects0_.Subject_Id as Subject1_1_, subjects0_.Subject_Id as Subject1_1_0_, subjects0_.Subject_Name as Subject2_1_0_ from Subject subjects0_ where subjects0_.Student_Id=? Subject Name:Compier Subject Name:Networking Subject Name:DBMS |
Download this example.
Next Topic: Hibernate Map mapping with example.
Previous Topic: Hibernate list mapping with example.