package hello;As can be seen, it is merely a Plain Old Java Object (POJO). The relational mapping that links the object to the database table is in an XML mapping document. The actual code that will create and save the object is below:
public class Message {
private Long id;
private String text;
private Message nextMessage;
// Constructors, getters, setters...
}
package hello;Session, Transaction and Query (not shown) objects are available due to the org.hibernate import. They allow a higher-level handling of database tasks than DAO using JDBC.
import java.util.*;
import org.hibernate.*;
import persistence.*;
public class HelloWorld {
public static void main(String[] args) {
// First unit of work
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Message message = new Message("Hello World");
Long msgId = (Long) session.save(message);
tx.commit();
session.close();
// Shutting down the application
HibernateUtil.shutdown();
}
}
Hibernate JPA is accessed through the use of Hibernate EntityManager and Hibernate Annotations. The Hibernate EntityManager is merely a wrapper around Hibernate Core, providing and supporting JPA functionality. Thus the change in the code can be seen below:
package hello;The XML document with all the relational data has been removed and replaced with inline annotations, which is provided by the javax.persistence import. The only difference between the Hibernate POJO and JPA POJO is the annotations. The code itself will run fine, the annotations make it a persistent entity but will do nothing unless Hibernate goes through it. JPA can glean enough information from them for the ORM and persistence tasks. The HelloWorld code:
import javax.persistence.*;
@Entity
@Table(name = "MESSAGES")
public class Message {
@Id @GeneratedValue
@Column(name = "MESSAGE_ID")
private Long id;
@Column(name = "MESSAGE_TEXT")
private String text;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "NEXT_MESSAGE_ID")
private Message nextMessage;
package hello;The Hibernate import is gone, replace by javax.persistence. The EntityManagerFactory, EntityManager and EntityTransaction run the database tasks.
import java.util.*;
import javax.persistence.*;
public class HelloWorld {
public static void main(String[] args) {
// Start EntityManagerFactory
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("helloworld");
// First unit of work
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Message message = new Message("Hello World");
em.persist(message);
tx.commit();
em.close();
// Shutting down the application
emf.close();
}
}
Both API seem similar and choosing one over the other is a matter of preference. Native Hibernate is the cleaner one, with the relational data put into an XML document. Hibernate JPA is standardised with Java and can be ported easily.
Other JPA implementations:
Open-source:
GlassFish
Apache OpenJPA
Commercial:
SAP NetWeaver
Oracle TopLink
BEA Kodo
4 comments:
Thanks for this blog article.
I'm shaking my head with Hibernate Annotations. Hibernate Core is still the way I'm going to go.
thx,
Henry
Like Hibernate, JPA supports XML configuration, so the choice of API is about a standard with multiple existing implementations (TopLink/Glassfish, Kodo/OpenJPA/WebLogic, Hibernate), versus a single product.
I think the Hibernate API is the wrong choice.
1. The standard JPA API is more clearly and precisely specified.
2. Doing persistence is a sufficiently hard problem, that a significantly better (more suitable for your project) implementation than Hibernate may eventuate (maybe one already has). This makes API independence more valuable in an ORM than other tools, such as a logger.
If you need the extra features of Hibernate you can (we do) selectively use the Hibernate API for just those features while using JPA for the rest.
Through your post, I came to know about native hibernate and hibernate JPA..But i knew little bit JPA, its using for Catching purpose,I think so...
Cegonsoft
Post a Comment