Welcome!

Java Authors: Maureen O'Gara, Liz McMillan, Walter H. Pinson, III, Yakov Werde, Tony Bishop

Related Topics: Java

Java: Article

Evaluating Options for Persisting Java Objects

Hibernate, DB4O, and Caché Database with Jalapeño

Note: For any non-trivial object schema you'll have to add annotations to support database specific functionality - such as relationships and indices. Annotating your Java Classes for Jalapeño works like the way it works for Hibernate. InterSystems is releasing NetBeans, Eclipse, and IntelliJ plug-ins for Caché 2007 that makes the process of adding annotations a point-and-click operation. Thus you can quickly define or modify the Object Storage in the Caché database.

An example of how a relationship is defined:

   // In the Department class
   @Relationship(type=RelationshipType.ONE_TO_MANY,inverseClass="Person")
   public ArrayList<Person> getEmployees(); // Method to return all employees

   // In the Person class
   @Relationship(type=RelationshipType.MANY_TO_ONE,inverseClass="Department")
   public Department getDepartment(); // Method to return the department

Ease of Persisting Objects
Once you have your databases created and configured, persisting your objects with any of these methods is very simple. Any of these is a distinct improvement over using JDBC/SQL and DAOs.

Hibernate
Once your Hibernate mappings are configured, persisting an object is very straightforward:

try{
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction(); //optional
Person person = new Person("James","Hogan");
Long personID = (Long) session.save(person);
tx.commit();
session.close(); //optional
}catch(Exception e) {

}

DB4O
Once again, DB4O makes it extremely easy to persist your objects. Simply instantiate an object and then call db.set() on it.

ObjectContainer db=Db4o.openFile("C:\db4o\test.yapp");
try {
     Person person = new Person("James","Hogan");
     db.set(person); // It's now saved!
// commit is called implicitly when you close the container,
// so you don't really need to call it here.
db.commit(); //optional
}finally {
db.close();
}

Caché
Caché also makes it extremely simple to save your objects.

try {
/* Connect to this machine, in the SAMPLES namespace */
ObjectManager objectManager = connect (connectiontype, host, username,
password);
     Person person = new Person("James","Hogan");
        Object id = objectManager.save (person, false);
        objectManager.close ();
} catch (Exception ex) {

}

Ease of Retrieving Objects
Storing data is only half the equation. It must be easy to access your objects as well. Once again all three solutions simplify the process of getting an object.

Hibernate
You can use HQL or SQL to retrieve objects using Hibernate. For example:

package hello;
import java.util.*;
import org.hibernate.*;
import persistence.*;
public class HibernateExample {
public static void main(String[] args) {

Session session = HibernateUtil.getSessionFactory().openSession();
Transaction newTransaction = session.beginTransaction();
List people = newSession.createQuery("from Person m order by?m.name asc").list();
System.out.println( people.size() + " people found:" );

for ( Iterator iter = people.iterator();
iter.hasNext(); ) {
Person person = (Person) iter.next();
System.out.println( person.getName() );
}
newTransaction.commit();
newSession.close();
// Shutting down the application
HibernateUtil.shutdown();
}
}


More Stories By Richard Conway

Richard Conway is a software developer and technology consultant with more than 15 years of technology, project management, and information services experience. He has extensive experience developing Java/Struts-based web applications. He started focusing more on Swing based developments at the beginning of 2005 and has just finished a Swing-based client/server asset management project. He lives in Miami with his wife Patricia, is currently working on an EMR application, and plays sand volleyball in his spare time.

Comments (2) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
Stefan Edlich 05/24/07 05:38:44 PM EDT

Hi,
your article is very well done. However one point:
>DB4O doesn't provide any support for constraints.
The is only partially true.
It's more then easy to implement this in just a few simple lines using db4o callbacks.

Best
Stefan Edlich
(Author of "The Defintive Guide to db4o" Apress)

Stefan Edlich 05/24/07 05:38:33 PM EDT

Hi,
your article is very well done. However one point:
>DB4O doesn't provide any support for constraints.
The is only partially true.
It's more then easy to implement this in just a few simple lines using db4o callbacks.

Best
Stefan Edlich
(Author of "The Defintive Guide to db4o" Apress)