diff --git a/dao/src/main/java/com/iluwatar/App.java b/dao/src/main/java/com/iluwatar/App.java index 285b325ad..db4d417b2 100644 --- a/dao/src/main/java/com/iluwatar/App.java +++ b/dao/src/main/java/com/iluwatar/App.java @@ -1,16 +1,15 @@ package com.iluwatar; -import java.util.List; public class App { public static void main( String[] args ) { - WizardDao dao = new WizardDao(); + WizardDaoImpl dao = new WizardDaoImpl(); persistData(dao); - queryData(dao); + queryData(); } - public static void persistData(WizardDao dao) { + public static void persistData(WizardDaoImpl dao) { Spell spell = new Spell("Fireball"); Spellbook spellbook = new Spellbook("Book of fire"); spell.setSpellbook(spellbook); @@ -21,16 +20,10 @@ public class App { dao.persist(wizard); } - public static void queryData(WizardDao dao) { - List wizards = dao.findAll(); - for (Wizard w: wizards) { + public static void queryData() { + MagicService magicService = new MagicServiceImpl(); + for (Wizard w: magicService.findAllWizards()) { System.out.println(w); - for (Spellbook spellbook: w.getSpellbooks()) { - System.out.println(spellbook); - for (Spell spell: spellbook.getSpells()) { - System.out.println(spell); - } - } } } } diff --git a/dao/src/main/java/com/iluwatar/Dao.java b/dao/src/main/java/com/iluwatar/Dao.java new file mode 100644 index 000000000..a0edd386e --- /dev/null +++ b/dao/src/main/java/com/iluwatar/Dao.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +import java.util.List; + +public interface Dao { + + E find(Long id); + + void persist(E entity); + + E merge(E entity); + + void delete(E entity); + + List findAll(); +} diff --git a/dao/src/main/java/com/iluwatar/DaoBase.java b/dao/src/main/java/com/iluwatar/DaoBaseImpl.java similarity index 91% rename from dao/src/main/java/com/iluwatar/DaoBase.java rename to dao/src/main/java/com/iluwatar/DaoBaseImpl.java index 86c09bbc3..a022f7038 100644 --- a/dao/src/main/java/com/iluwatar/DaoBase.java +++ b/dao/src/main/java/com/iluwatar/DaoBaseImpl.java @@ -10,7 +10,7 @@ import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Restrictions; -public abstract class DaoBase { +public abstract class DaoBaseImpl implements Dao { @SuppressWarnings("unchecked") protected Class persistentClass = (Class) ((ParameterizedType) getClass() @@ -36,7 +36,8 @@ public abstract class DaoBase { return sessionFactory.openSession(); } - E find(Long id) { + @Override + public E find(Long id) { Session session = getSession(); Transaction tx = null; E result = null; @@ -57,7 +58,8 @@ public abstract class DaoBase { return result; } - void persist(E entity) { + @Override + public void persist(E entity) { Session session = getSession(); Transaction tx = null; try { @@ -74,7 +76,8 @@ public abstract class DaoBase { } } - E merge(E entity) { + @Override + public E merge(E entity) { Session session = getSession(); Transaction tx = null; E result = null; @@ -93,7 +96,8 @@ public abstract class DaoBase { return result; } - void delete(E entity) { + @Override + public void delete(E entity) { Session session = getSession(); Transaction tx = null; try { @@ -110,7 +114,8 @@ public abstract class DaoBase { } } - List findAll() { + @Override + public List findAll() { Session session = getSession(); Transaction tx = null; List result = null; diff --git a/dao/src/main/java/com/iluwatar/MagicService.java b/dao/src/main/java/com/iluwatar/MagicService.java new file mode 100644 index 000000000..c02c23ecb --- /dev/null +++ b/dao/src/main/java/com/iluwatar/MagicService.java @@ -0,0 +1,13 @@ +package com.iluwatar; + +import java.util.List; + +public interface MagicService { + + List findAllWizards(); + + List findAllSpellbooks(); + + List findAllSpells(); + +} diff --git a/dao/src/main/java/com/iluwatar/MagicServiceImpl.java b/dao/src/main/java/com/iluwatar/MagicServiceImpl.java new file mode 100644 index 000000000..8fbd0d6e4 --- /dev/null +++ b/dao/src/main/java/com/iluwatar/MagicServiceImpl.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +import java.util.List; + +public class MagicServiceImpl implements MagicService { + + @Override + public List findAllWizards() { + return new WizardDaoImpl().findAll(); + } + + @Override + public List findAllSpellbooks() { + return new SpellbookDaoImpl().findAll(); + } + + @Override + public List findAllSpells() { + return new SpellDaoImpl().findAll(); + } +} diff --git a/dao/src/main/java/com/iluwatar/Spell.java b/dao/src/main/java/com/iluwatar/Spell.java index 076575e85..04b9dcd8b 100644 --- a/dao/src/main/java/com/iluwatar/Spell.java +++ b/dao/src/main/java/com/iluwatar/Spell.java @@ -4,8 +4,6 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; diff --git a/dao/src/main/java/com/iluwatar/SpellDao.java b/dao/src/main/java/com/iluwatar/SpellDao.java deleted file mode 100644 index 1d96e231e..000000000 --- a/dao/src/main/java/com/iluwatar/SpellDao.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public class SpellDao extends DaoBase { - -} diff --git a/dao/src/main/java/com/iluwatar/SpellDaoImpl.java b/dao/src/main/java/com/iluwatar/SpellDaoImpl.java new file mode 100644 index 000000000..77e6872bd --- /dev/null +++ b/dao/src/main/java/com/iluwatar/SpellDaoImpl.java @@ -0,0 +1,5 @@ +package com.iluwatar; + +public class SpellDaoImpl extends DaoBaseImpl { + +} diff --git a/dao/src/main/java/com/iluwatar/Spellbook.java b/dao/src/main/java/com/iluwatar/Spellbook.java index 63b7de0b7..fbd490e70 100644 --- a/dao/src/main/java/com/iluwatar/Spellbook.java +++ b/dao/src/main/java/com/iluwatar/Spellbook.java @@ -9,8 +9,6 @@ import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; @@ -48,7 +46,7 @@ public class Spellbook extends BaseEntity { @JoinColumn(name="WIZARD_ID_FK", referencedColumnName="WIZARD_ID") private Wizard wizard; - @OneToMany(mappedBy = "spellbook", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @OneToMany(mappedBy = "spellbook", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Set spells; public String getName() { diff --git a/dao/src/main/java/com/iluwatar/SpellbookDao.java b/dao/src/main/java/com/iluwatar/SpellbookDao.java deleted file mode 100644 index b1b1497dc..000000000 --- a/dao/src/main/java/com/iluwatar/SpellbookDao.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public class SpellbookDao extends DaoBase { - -} diff --git a/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java b/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java new file mode 100644 index 000000000..e1c6fd6f6 --- /dev/null +++ b/dao/src/main/java/com/iluwatar/SpellbookDaoImpl.java @@ -0,0 +1,5 @@ +package com.iluwatar; + +public class SpellbookDaoImpl extends DaoBaseImpl { + +} diff --git a/dao/src/main/java/com/iluwatar/Wizard.java b/dao/src/main/java/com/iluwatar/Wizard.java index c75f549c6..bd8481f15 100644 --- a/dao/src/main/java/com/iluwatar/Wizard.java +++ b/dao/src/main/java/com/iluwatar/Wizard.java @@ -9,8 +9,6 @@ import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; import javax.persistence.OneToMany; import javax.persistence.Table; @@ -42,7 +40,7 @@ public class Wizard extends BaseEntity { private String name; - @OneToMany(mappedBy = "wizard", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @OneToMany(mappedBy = "wizard", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Set spellbooks; public String getFirstName() { diff --git a/dao/src/main/java/com/iluwatar/WizardDao.java b/dao/src/main/java/com/iluwatar/WizardDao.java deleted file mode 100644 index f9cf92768..000000000 --- a/dao/src/main/java/com/iluwatar/WizardDao.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public class WizardDao extends DaoBase { - -} diff --git a/dao/src/main/java/com/iluwatar/WizardDaoImpl.java b/dao/src/main/java/com/iluwatar/WizardDaoImpl.java new file mode 100644 index 000000000..58d61216b --- /dev/null +++ b/dao/src/main/java/com/iluwatar/WizardDaoImpl.java @@ -0,0 +1,5 @@ +package com.iluwatar; + +public class WizardDaoImpl extends DaoBaseImpl { + +}