h1

Hibernate Example Java Classes

/*

* The Many-To-Many relationship between User and PhoneNumber objects requires two tables

* app_user and phone_number with a transition table user_number that maps phone numbers to users.

* The @ManyToMany annotation shows how to make the User object aware of its phone numbers.

*/

package edu.byui.examples;

import java.util.List;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.GeneratedValue;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.OneToMany;

import javax.persistence.Table;

@Entity

@Table(name = “app_user”)

public class User {

@Id

@GeneratedValue

private Integer id;

private String uname;

private String pword;

/*

* one User can have many phone numbers.  CascadeType.ALL causes associated

* phone numbers to be delted when a User is deleted.

*/

@ManyToMany(cascade=CascadeType.ALL)

@JoinTable(

name=“user_number”,

joinColumns = { @JoinColumn( name=“user_id”) },

inverseJoinColumns = @JoinColumn( name=“phone_id”)

)

private Set<PhoneNumber> phoneNumbers;

public User() {

// TODO Auto-generated constructor stub

}

public String toString() {

return “User [id=" + id + ", pword=" + pword + ", uname=" + uname + ", phoneNumbers]“;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUname() {

return uname;

}

public void setUname(String uname) {

this.uname = uname;

}

public String getPword() {

return pword;

}

public void setPword(String pword) {

this.pword = pword;

}

public Set<PhoneNumber> getPhoneNumbers() {

return phoneNumbers;

}

}

package edu.byui.examples;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

@Entity

@Table(name = “phone_number”)

public class PhoneNumber {

@Id

@GeneratedValue

private Integer id;

private String phone;

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

}

/*

* The purpose of this class is to show how some of the abilities of Hibernate

* are used.  Covered in this example application are adding records to tables,

* modifying records in tables, removing records from tables, and

* using a Many-To-Many relationship between tables.

*/

package edu.byui.examples;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.apache.log4j.Logger;

public class Runner {

final static Logger logger = Logger.getLogger(Runner.class);

private List<User> users;

public Runner() {

// TODO Auto-generated constructor stub

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Runner aRunner = new Runner();

aRunner.addNewUsers();

aRunner.showAllUsers();

aRunner.modifyUser();

aRunner.addSharedPhoneNumber();

aRunner.deleteAddedUsers();

}

/*

* show how to add records to the database

*/

private void addNewUsers() {

Session session = HibernateUtilSingleton.getSessionFactory().getCurrentSession();

/*

* all database interactions in Hibernate are required to be inside a transaction.

*/

Transaction transaction = session.beginTransaction();

/*

* create some User Java objects.

*/

User aUser = new User();

aUser.setUname(“aName”);

aUser.setPword(“aPass”);

User anotherUser = new User();

anotherUser.setUname(“lee”);

anotherUser.setPword(“barney”);

/*

* save each object as a record in the database

*/

session.save(aUser);

session.save(anotherUser);

transaction.commit();

/*

* prove that the user objects were added to the database and that

* the objects were updated with the database generated user id.

*/

System.out.println(“aUser generated ID is: “ + aUser.getId());

System.out.println(“anotherUser generated ID is: “ + anotherUser.getId());

}

/*

* show how to get a collection of type List containing all of the records in the app_user table

*/

private void showAllUsers() {

Session session = HibernateUtilSingleton.getSessionFactory().getCurrentSession();

Transaction transaction = session.beginTransaction();

/*

* execute a HQL query against the database.

*/

users = session.createQuery(“select u from User as u order by u.id”).list();

System.out.println(“num users: “+users.size());

/*

* iterate over each User object returned by the query

*/

Iterator<User> iter = users.iterator();;

while(iter.hasNext()) {

User element = iter.next();

System.out.println(element.toString());

System.out.println(“num of phone numbers: “+element.getPhoneNumbers().size());

}

transaction.commit();

}

/*

* show how to modify a database record

*/

private void modifyUser() {

Session session = HibernateUtilSingleton.getSessionFactory().getCurrentSession();

Transaction transaction = session.beginTransaction();

/*

* get a single User object form the database.  The second object in the users list could be used here instead but I

* wanted you to see how to get back just one object from the database.

*/

User anotherUser = (User)session.createQuery(“select u from User as u where u.uname=’lee’”).uniqueResult();

/*

* change the user name for the Java object

*/

anotherUser.setUname(“Joshua”);

/*

* call the session merge method for the User object in question.  This updates the database table.

*/

session.merge(anotherUser);

transaction.commit();

/*

* prove that the database was updated by printing out all of the User objects created by a HQL query

*/

showAllUsers();

}

private void addSharedPhoneNumber() {

Session session = HibernateUtilSingleton.getSessionFactory().getCurrentSession();

Transaction transaction = session.beginTransaction();

/*

* get a single User object form the database.  The second object in the users list could be used here instead but I

* wanted you to see how to get back just one object from the database.

*/

User firstUser = (User)session.createQuery(“select u from User as u where u.uname=’Joshua’”).uniqueResult();

/*

* change the user name for the Java object

*/

Set<PhoneNumber> phoneNumbers = firstUser.getPhoneNumbers();

PhoneNumber anotherNumber = new PhoneNumber();

anotherNumber.setPhone(“(546)222-9898″);

session.save(anotherNumber);

phoneNumbers.add(anotherNumber);

/*

* call the session merge method for the User object in question.  This updates the database table.

*/

session.merge(firstUser);

User secondUser = (User)session.createQuery(“select u from User as u where u.uname=’aName’”).uniqueResult();

/*

* set the single phone number to be used by more than one User

*/

phoneNumbers = secondUser.getPhoneNumbers();

phoneNumbers.add(anotherNumber);

/*

* call the session merge method for the User object in question.  This updates the database table.

*/

session.merge(secondUser);

transaction.commit();

/*

* prove that the database was updated by printing out all of the User objects created by a HQL query

*/

showAllUsers();

}

private void deleteAddedUsers() {

// TODO Auto-generated method stub

Session session = HibernateUtilSingleton.getSessionFactory().getCurrentSession();

Transaction transaction = session.beginTransaction();

int numUsers = users.size();

for(int i = 2; i < numUsers; i++){

System.out.println(“deleting user “+users.get(i).getUname());

User aUser = users.get(i);

session.delete(users.get(i));

}

transaction.commit();

/*

* at this point the records have been removed from the database but still exist in our class list attribute.

* Do not store retrieved lists since they will be out of synch with the database table from which they come.

* This example shows that you should not store retrieved lists.

*/

System.out.println(users);

users.remove(2);

users.remove(2);

/*

* now the Java objects are also gone.

*/

System.out.println(users);

}

}


Leave a Comment