Java Tutorial/Hibernate/Session
Содержание
Create Criteria from Session
File: Main.java
<source lang="java">
import java.util.Date; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; public class Main {
public static void main(String[] args) throws Exception { HibernateUtil hibernateUtil = new HibernateUtil(); hibernateUtil .executeSQLCommand("create table survey (id int,name varchar, purchasedate date);"); Session session = hibernateUtil.getSession(); Survey survey = new Survey(); survey.setName("Survey"); survey.setPurchaseDate(new Date()); session.save(survey); session.flush(); Criteria crit = session.createCriteria(Survey.class); List results = crit.list(); Iterator iter = results.iterator(); while (iter.hasNext()) { Survey cd = (Survey) iter.next(); System.out.println("Result Name:"+cd.getName()); } session.close(); hibernateUtil.checkData("select * from survey"); }
}</source>
Create Query from Session
File: Main.java
<source lang="java">
import java.util.List; import org.hibernate.Query; import org.hibernate.Session; public class Main {
public static void main(String[] args) throws Exception { HibernateUtil hibernateUtil = new HibernateUtil(); hibernateUtil .executeSQLCommand("create table speakers (uid int, firstName varchar,lastName varchar, event_id int);"); hibernateUtil .executeSQLCommand("create table locations (uid int, name varchar, address varchar, event_id int);"); hibernateUtil .executeSQLCommand("create table attendees (uid int, firstName varchar, lastName varchar, event_id int);"); hibernateUtil .executeSQLCommand("create table events (uid int , name varchar, start_date date, duration integer,location_id int);"); Session session = hibernateUtil.getSession(); Event e = new Event(); e.setName("testSave"); session.saveOrUpdate(e); session.flush(); Query query = session.createQuery("from Event"); List list = query.list(); session.close(); hibernateUtil.checkData("select * from events"); hibernateUtil.checkData("select * from speakers"); hibernateUtil.checkData("select * from locations"); hibernateUtil.checkData("select * from attendees"); }
}</source>
Let Hibernate to decide whether to save or update
File: Main.java
<source lang="java">
import java.util.HashSet; import org.hibernate.Session; public class Main {
public static void main(String[] args) throws Exception { HibernateUtil hibernateUtil = new HibernateUtil(); hibernateUtil .executeSQLCommand("create table speakers (uid int, firstName varchar,lastName varchar, event_id int);"); hibernateUtil .executeSQLCommand("create table locations (uid int, name varchar, address varchar, event_id int);"); hibernateUtil .executeSQLCommand("create table attendees (uid int, firstName varchar, lastName varchar, event_id int);"); hibernateUtil .executeSQLCommand("create table events (uid int , name varchar, start_date date, duration integer,location_id int);"); Session session = hibernateUtil.getSession(); Event e = new Event(); e.setName("testSave"); session.saveOrUpdate(e); session.flush(); session.close(); hibernateUtil.checkData("select * from events"); hibernateUtil.checkData("select * from speakers"); hibernateUtil.checkData("select * from locations"); hibernateUtil.checkData("select * from attendees"); }
}</source>
Listen to Session Event
File: Main.java
<source lang="java">
import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.event.AutoFlushEvent; import org.hibernate.event.DeleteEvent; import org.hibernate.event.DirtyCheckEvent; import org.hibernate.event.EvictEvent; import org.hibernate.event.FlushEntityEvent; import org.hibernate.event.FlushEvent; import org.hibernate.event.InitializeCollectionEvent; import org.hibernate.event.LoadEvent; import org.hibernate.event.LockEvent; import org.hibernate.event.MergeEvent; import org.hibernate.event.PersistEvent; import org.hibernate.event.PostLoadEvent; import org.hibernate.event.PreLoadEvent; import org.hibernate.event.RefreshEvent; import org.hibernate.event.ReplicateEvent; import org.hibernate.event.SaveOrUpdateEvent; import org.hibernate.event.def.DefaultAutoFlushEventListener; import org.hibernate.event.def.DefaultDeleteEventListener; import org.hibernate.event.def.DefaultDirtyCheckEventListener; import org.hibernate.event.def.DefaultEvictEventListener; import org.hibernate.event.def.DefaultFlushEntityEventListener; import org.hibernate.event.def.DefaultFlushEventListener; import org.hibernate.event.def.DefaultInitializeCollectionEventListener; import org.hibernate.event.def.DefaultLoadEventListener; import org.hibernate.event.def.DefaultLockEventListener; import org.hibernate.event.def.DefaultMergeEventListener; import org.hibernate.event.def.DefaultPersistEventListener; import org.hibernate.event.def.DefaultPostLoadEventListener; import org.hibernate.event.def.DefaultPreLoadEventListener; import org.hibernate.event.def.DefaultRefreshEventListener; import org.hibernate.event.def.DefaultReplicateEventListener; import org.hibernate.event.def.DefaultSaveOrUpdateEventListener; import org.hibernate.mapping.Map; public class Main {
public static void main(String[] args) throws Exception { HibernateUtil hibernateUtil = new HibernateUtil(); hibernateUtil .executeSQLCommand("create table Product(id int, name varchar, description varchar, price decimal(6,2), supplierid int)"); hibernateUtil.executeSQLCommand("create table Supplier (id int , name varchar)"); hibernateUtil .executeSQLCommand("create table Software(id int, name varchar, description varchar, price decimal(6,2), supplierid int, version varchar)"); hibernateUtil.getConfiguration().setListener("save-update", new MySaveOrUpdateEventListener()); // Apply this event listener (programmatically) hibernateUtil.getConfiguration().setListener("auto-flush", new MyAutoFlushEventListener()); hibernateUtil.getConfiguration().setListener("delete", new MyDeleteEventListener()); hibernateUtil.getConfiguration().setListener("dirty-check", new MyDirtyCheckEventListener()); hibernateUtil.getConfiguration().setListener("evict", new MyEvictEventListener()); hibernateUtil.getConfiguration().setListener("flush-entity", new MyFlushEntityEventListener()); hibernateUtil.getConfiguration().setListener("flush", new MyFlushEventListener()); hibernateUtil.getConfiguration().setListener("load-collection", new MyInitializeCollectionEventListener()); hibernateUtil.getConfiguration().setListener("load", new MyLoadEventListener()); hibernateUtil.getConfiguration().setListener("lock", new MyLockEventListener()); hibernateUtil.getConfiguration().setListener("merge", new MyMergeEventListener()); hibernateUtil.getConfiguration().setListener("persist", new MyPersistEventListener()); hibernateUtil.getConfiguration().setListener("post-load", new MyPostLoadEventListener()); hibernateUtil.getConfiguration().setListener("pre-load", new MyPreLoadEventListener()); hibernateUtil.getConfiguration().setListener("refresh", new MyRefreshEventListener()); hibernateUtil.getConfiguration().setListener("replicate", new MyReplicateEventListener()); hibernateUtil.getConfiguration().setListener("save-update", new MySaveOrUpdateEventListener()); Session session = hibernateUtil.getConfiguration().buildSessionFactory().openSession(); Supplier superCorp = new Supplier(); superCorp.setName("Supplier1"); session.save(superCorp); Supplier megaInc = new Supplier(); megaInc.setName("Supplier2"); session.save(megaInc); Product mouse = new Product("Product1", "first product", 20.0); mouse.setSupplier(superCorp); superCorp.getProducts().add(mouse); session.flush(); Product mouse2 = new Product("Product2", "second product", 22.0); mouse2.setSupplier(superCorp); superCorp.getProducts().add(mouse2); Product keyboard = new Product("Product3", "third product", 30.0); keyboard.setSupplier(megaInc); megaInc.getProducts().add(keyboard); Software webBrowser = new Software("Web Browser", "new browser", 75.0, "2.0"); webBrowser.setSupplier(superCorp); superCorp.getProducts().add(webBrowser); Software email = new Software("Email", "email client", 49.99, "4.1 Edition"); email.setSupplier(megaInc); megaInc.getProducts().add(email); session.flush(); session.close(); hibernateUtil.checkData("select * from Product"); hibernateUtil.checkData("select * from Software"); hibernateUtil.checkData("select * from Supplier"); }
} class MySaveOrUpdateEventListener extends DefaultSaveOrUpdateEventListener {
public void onSaveOrUpdate(SaveOrUpdateEvent event) { System.out.println(event.getEntity()); super.onSaveOrUpdate(event); }
} class MyAutoFlushEventListener extends DefaultAutoFlushEventListener {
public void onAutoFlush(AutoFlushEvent event) throws HibernateException { System.out.println("AutoFlushEventListener.onAutoFlush(AutoFlushEvent)"); super.onAutoFlush(event); }
} class MyDeleteEventListener extends DefaultDeleteEventListener {
public void onDelete(DeleteEvent event) throws HibernateException { System.out.println("DeleteEventListener.onDelete(DeleteEvent)"); super.onDelete(event); }
} class MyDirtyCheckEventListener extends DefaultDirtyCheckEventListener {
public void onDirtyCheck(DirtyCheckEvent event) { System.out.println("DirtyCheckEventListener.onDirtyCheck(DirtyCheckEvent)"); super.onDirtyCheck(event); }
} class MyEvictEventListener extends DefaultEvictEventListener {
public void onEvict(EvictEvent event) throws HibernateException { System.out.println("EvictEventListener.onEvict(EvictEvent)"); super.onEvict(event); }
} class MyFlushEntityEventListener extends DefaultFlushEntityEventListener {
public void onFlushEntity(FlushEntityEvent event) throws HibernateException { System.out.println("FlushEntityEventListener.onFlushEntity(FlushEntityEvent)"); super.onFlushEntity(event); }
} class MyFlushEventListener extends DefaultFlushEventListener {
public void onFlush(FlushEvent event) throws HibernateException { System.out.println("FlushEventListener.onFlush(FlushEvent)"); super.onFlush(event); }
} class MyInitializeCollectionEventListener extends DefaultInitializeCollectionEventListener {
public void onInitializeCollection(InitializeCollectionEvent event) throws HibernateException { System.out .println("InitializeCollectionEventListener.onInitializeCollection(InitializeCollectionEvent)"); super.onInitializeCollection(event); }
} class MyLoadEventListener extends DefaultLoadEventListener {
public void onLoad(LoadEvent event, LoadType type) throws HibernateException { System.out.println("LoadEventListener.onLoad(LoadEvent,LoadType)"); super.onLoad(event, type); }
} class MyLockEventListener extends DefaultLockEventListener {
public void onLock(LockEvent event) throws HibernateException { System.out.println("LockEventListener.onLock(LockEvent)"); super.onLock(event); }
} class MyMergeEventListener extends DefaultMergeEventListener {
public void onMerge(MergeEvent event, Map copiedAlready) { System.out.println("MergeEventListener.onMerge(MergeEvent,Map)"); // super.onMerge(event, copiedAlready); } public void onMerge(MergeEvent event) throws HibernateException { System.out.println("MergeEventListener.onMerge(MergeEvent)"); super.onMerge(event); }
} class MyPersistEventListener extends DefaultPersistEventListener {
public void onPersist(PersistEvent event, Map createdAlready) throws HibernateException { System.out.println("PersistEventListener.onPersist(PersistEvent,Map)"); // super.onPersist(event, createdAlready); } public void onPersist(PersistEvent event) throws HibernateException { System.out.println("PersistEventListener.onPersist(PersistEvent)"); super.onPersist(event); }
} class MyPostLoadEventListener extends DefaultPostLoadEventListener {
public void onPostLoad(PostLoadEvent event) { System.out.println("PostLoadEventListener.onPostLoad(onPostLoad)"); super.onPostLoad(event); }
} class MyPreLoadEventListener extends DefaultPreLoadEventListener {
public void onPreLoad(PreLoadEvent event) { System.out.println("PreLoadEventListener.onPreLoad(PreLoadEvent)"); super.onPreLoad(event); }
} class MyRefreshEventListener extends DefaultRefreshEventListener {
public void onRefresh(RefreshEvent event) throws HibernateException { System.out.println("RefreshEventListener.onRefresh(RefreshEvent)"); super.onRefresh(event); }
} class MyReplicateEventListener extends DefaultReplicateEventListener {
public void onReplicate(ReplicateEvent event) throws HibernateException { System.out.println("ReplicateEventListener.onReplicate(ReplicateEvent)"); super.onReplicate(event); }
} class NoisySaveOrUpdateEventListener extends DefaultSaveOrUpdateEventListener {
public void onSaveOrUpdate(SaveOrUpdateEvent event) throws HibernateException { System.out.println("SaveOrUpdateEventListener.onSaveOrUpdate(SaveOrUpdateEvent)"); super.onSaveOrUpdate(event); }
}</source>
Save and update event
File: Main.java
<source lang="java">
import java.io.Serializable; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.event.SaveOrUpdateEvent; import org.hibernate.event.def.DefaultSaveOrUpdateEventListener; public class Main {
public static void main(String[] args) throws Exception { HibernateUtil hibernateUtil = new HibernateUtil(); hibernateUtil .executeSQLCommand("create table Product(id int, name varchar, description varchar, price decimal(6,2), supplierid int)"); hibernateUtil.executeSQLCommand("create table Supplier (id int , name varchar)"); hibernateUtil .executeSQLCommand("create table Software(id int, name varchar, description varchar, price decimal(6,2), supplierid int, version varchar)"); hibernateUtil.getConfiguration().setListener("save-update", new MySaveOrUpdateEventListener()); Session session = hibernateUtil.getConfiguration().buildSessionFactory().openSession(); Supplier superCorp = new Supplier(); superCorp.setName("Supplier1"); session.save(superCorp); Supplier megaInc = new Supplier(); megaInc.setName("Supplier2"); session.save(megaInc); Product mouse = new Product("Product1", "first product", 20.0); mouse.setSupplier(superCorp); superCorp.getProducts().add(mouse); session.flush(); Product mouse2 = new Product("Product2", "second product", 22.0); mouse2.setSupplier(superCorp); superCorp.getProducts().add(mouse2); Product keyboard = new Product("Product3", "third product", 30.0); keyboard.setSupplier(megaInc); megaInc.getProducts().add(keyboard); Software webBrowser = new Software("Web Browser", "new browser", 75.0, "2.0"); webBrowser.setSupplier(superCorp); superCorp.getProducts().add(webBrowser); Software email = new Software("Email", "email client", 49.99, "4.1 Edition"); email.setSupplier(megaInc); megaInc.getProducts().add(email); session.flush(); session.close(); hibernateUtil.checkData("select * from Product"); hibernateUtil.checkData("select * from Software"); hibernateUtil.checkData("select * from Supplier"); }
} class MySaveOrUpdateEventListener extends DefaultSaveOrUpdateEventListener {
public void onSaveOrUpdate(SaveOrUpdateEvent event) { System.out.println(event.getEntity()); super.onSaveOrUpdate(event); }
}</source>