diff --git a/dao/src/main/java/com/iluwatar/App.java b/dao/src/main/java/com/iluwatar/App.java index dad5cc8ab..050c370c4 100644 --- a/dao/src/main/java/com/iluwatar/App.java +++ b/dao/src/main/java/com/iluwatar/App.java @@ -1,6 +1,5 @@ package com.iluwatar; -import java.util.List; /** * @@ -94,22 +93,22 @@ public class App { WizardDao wizardDao = new WizardDaoImpl(); Wizard wizard1 = new Wizard("Aderlard Boud"); wizardDao.persist(wizard1); -// wizard1.addSpellbook(spellbook1); -// wizard1.addSpellbook(spellbook2); + wizard1.addSpellbook(spellbookDao.findByName("Book of Orgymon")); + wizard1.addSpellbook(spellbookDao.findByName("Book of Aras")); wizardDao.merge(wizard1); Wizard wizard2 = new Wizard("Anaxis Bajraktari"); wizardDao.persist(wizard2); -// wizard2.addSpellbook(spellbook3); -// wizard2.addSpellbook(spellbook4); + wizard2.addSpellbook(spellbookDao.findByName("Book of Kritior")); + wizard2.addSpellbook(spellbookDao.findByName("Book of Tamaex")); wizardDao.merge(wizard2); Wizard wizard3 = new Wizard("Xuban Munoa"); wizardDao.persist(wizard3); -// wizard3.addSpellbook(spellbook5); -// wizard3.addSpellbook(spellbook6); + wizard3.addSpellbook(spellbookDao.findByName("Book of Idores")); + wizard3.addSpellbook(spellbookDao.findByName("Book of Opaen")); wizardDao.merge(wizard3); Wizard wizard4 = new Wizard("Blasius Dehooge"); wizardDao.persist(wizard4); -// wizard4.addSpellbook(spellbook7); + wizard4.addSpellbook(spellbookDao.findByName("Book of Kihione")); wizardDao.merge(wizard4); } diff --git a/dao/src/main/java/com/iluwatar/DaoBaseImpl.java b/dao/src/main/java/com/iluwatar/DaoBaseImpl.java index d7be9670e..36981a3ce 100644 --- a/dao/src/main/java/com/iluwatar/DaoBaseImpl.java +++ b/dao/src/main/java/com/iluwatar/DaoBaseImpl.java @@ -5,9 +5,7 @@ import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; -import org.hibernate.SessionFactory; import org.hibernate.Transaction; -import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Restrictions; public abstract class DaoBaseImpl implements Dao { @@ -16,7 +14,7 @@ public abstract class DaoBaseImpl implements Dao { protected Class persistentClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; - private Session getSession() { + protected Session getSession() { return HibernateUtil.getSessionFactory().openSession(); } diff --git a/dao/src/main/java/com/iluwatar/SpellDao.java b/dao/src/main/java/com/iluwatar/SpellDao.java index b7c57f43e..ea762e30f 100644 --- a/dao/src/main/java/com/iluwatar/SpellDao.java +++ b/dao/src/main/java/com/iluwatar/SpellDao.java @@ -1,5 +1,7 @@ package com.iluwatar; public interface SpellDao extends Dao { + + Spell findByName(String name); } diff --git a/dao/src/main/java/com/iluwatar/SpellDaoImpl.java b/dao/src/main/java/com/iluwatar/SpellDaoImpl.java index be898dbc0..94fc842cc 100644 --- a/dao/src/main/java/com/iluwatar/SpellDaoImpl.java +++ b/dao/src/main/java/com/iluwatar/SpellDaoImpl.java @@ -1,5 +1,31 @@ package com.iluwatar; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.criterion.Expression; + public class SpellDaoImpl extends DaoBaseImpl implements SpellDao { + @Override + public Spell findByName(String name) { + Session session = getSession(); + Transaction tx = null; + Spell result = null; + try { + tx = session.beginTransaction(); + Criteria criteria = session.createCriteria(persistentClass); + criteria.add(Expression.eq("name", name)); + result = (Spell) criteria.uniqueResult(); + tx.commit(); + } + catch (Exception e) { + if (tx!=null) tx.rollback(); + throw e; + } + finally { + session.close(); + } + return result; + } } diff --git a/dao/src/main/java/com/iluwatar/SpellbookDao.java b/dao/src/main/java/com/iluwatar/SpellbookDao.java index e6e7f7d54..17d66fe80 100644 --- a/dao/src/main/java/com/iluwatar/SpellbookDao.java +++ b/dao/src/main/java/com/iluwatar/SpellbookDao.java @@ -1,5 +1,7 @@ package com.iluwatar; public interface SpellbookDao extends Dao { + + Spellbook findByName(String name); } diff --git a/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java b/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java index 3d128e546..07d1853d9 100644 --- a/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java +++ b/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java @@ -1,5 +1,34 @@ package com.iluwatar; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.criterion.Expression; + public class SpellbookDaoImpl extends DaoBaseImpl implements SpellbookDao { + @Override + public Spellbook findByName(String name) { + Session session = getSession(); + Transaction tx = null; + Spellbook result = null; + try { + tx = session.beginTransaction(); + Criteria criteria = session.createCriteria(persistentClass); + criteria.add(Expression.eq("name", name)); + result = (Spellbook) criteria.uniqueResult(); + result.getSpells().size(); + result.getWizards().size(); + tx.commit(); + } + catch (Exception e) { + if (tx!=null) tx.rollback(); + throw e; + } + finally { + session.close(); + } + return result; + } + } diff --git a/dao/src/main/java/com/iluwatar/WizardDao.java b/dao/src/main/java/com/iluwatar/WizardDao.java index 687ceca42..55960b3e1 100644 --- a/dao/src/main/java/com/iluwatar/WizardDao.java +++ b/dao/src/main/java/com/iluwatar/WizardDao.java @@ -1,5 +1,7 @@ package com.iluwatar; public interface WizardDao extends Dao { + + Wizard findByName(String name); } diff --git a/dao/src/main/java/com/iluwatar/WizardDaoImpl.java b/dao/src/main/java/com/iluwatar/WizardDaoImpl.java index 2a8df6479..ba56f4984 100644 --- a/dao/src/main/java/com/iluwatar/WizardDaoImpl.java +++ b/dao/src/main/java/com/iluwatar/WizardDaoImpl.java @@ -1,5 +1,32 @@ package com.iluwatar; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.criterion.Expression; + public class WizardDaoImpl extends DaoBaseImpl implements WizardDao { + @Override + public Wizard findByName(String name) { + Session session = getSession(); + Transaction tx = null; + Wizard result = null; + try { + tx = session.beginTransaction(); + Criteria criteria = session.createCriteria(persistentClass); + criteria.add(Expression.eq("name", name)); + result = (Wizard) criteria.uniqueResult(); + result.getSpellbooks().size(); + tx.commit(); + } + catch (Exception e) { + if (tx!=null) tx.rollback(); + throw e; + } + finally { + session.close(); + } + return result; + } }