From 08c3145c470227a2aedef9171db4324f287a5112 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Mon, 13 Apr 2015 22:08:01 +0300 Subject: [PATCH] Work on DAO example. Table per class strategy. Persist fixes. --- dao/src/main/java/com/iluwatar/App.java | 8 ++++++ .../main/java/com/iluwatar/BaseEntity.java | 23 ++++----------- dao/src/main/java/com/iluwatar/DaoBase.java | 2 +- dao/src/main/java/com/iluwatar/Spell.java | 28 ++++++++++++++++++- dao/src/main/java/com/iluwatar/Spellbook.java | 23 +++++++++++++-- dao/src/main/java/com/iluwatar/Wizard.java | 21 +++++++++++++- 6 files changed, 82 insertions(+), 23 deletions(-) diff --git a/dao/src/main/java/com/iluwatar/App.java b/dao/src/main/java/com/iluwatar/App.java index 2b1a3d725..285b325ad 100644 --- a/dao/src/main/java/com/iluwatar/App.java +++ b/dao/src/main/java/com/iluwatar/App.java @@ -13,8 +13,10 @@ public class App { public static void persistData(WizardDao dao) { Spell spell = new Spell("Fireball"); Spellbook spellbook = new Spellbook("Book of fire"); + spell.setSpellbook(spellbook); spellbook.getSpells().add(spell); Wizard wizard = new Wizard("Jugga"); + spellbook.setWizard(wizard); wizard.getSpellbooks().add(spellbook); dao.persist(wizard); } @@ -23,6 +25,12 @@ public class App { List wizards = dao.findAll(); for (Wizard w: wizards) { 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/BaseEntity.java b/dao/src/main/java/com/iluwatar/BaseEntity.java index 8a6f626b8..68c3def47 100644 --- a/dao/src/main/java/com/iluwatar/BaseEntity.java +++ b/dao/src/main/java/com/iluwatar/BaseEntity.java @@ -1,26 +1,13 @@ package com.iluwatar; -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.MappedSuperclass; import javax.persistence.Version; -@Entity +@MappedSuperclass +@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public class BaseEntity { - - @Id - @GeneratedValue - @Column(name = "ID") - private Long id; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } @Version private Long version; diff --git a/dao/src/main/java/com/iluwatar/DaoBase.java b/dao/src/main/java/com/iluwatar/DaoBase.java index 2257af90b..86c09bbc3 100644 --- a/dao/src/main/java/com/iluwatar/DaoBase.java +++ b/dao/src/main/java/com/iluwatar/DaoBase.java @@ -27,7 +27,7 @@ public abstract class DaoBase { .setProperty("hibernate.connection.url", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1") .setProperty("hibernate.current_session_context_class", "thread") .setProperty("hibernate.show_sql", "true") - .setProperty("hibernate.hbm2ddl.auto", "create") + .setProperty("hibernate.hbm2ddl.auto", "create-drop") .buildSessionFactory(); return sessionFactory; } diff --git a/dao/src/main/java/com/iluwatar/Spell.java b/dao/src/main/java/com/iluwatar/Spell.java index 5569fa6a5..076575e85 100644 --- a/dao/src/main/java/com/iluwatar/Spell.java +++ b/dao/src/main/java/com/iluwatar/Spell.java @@ -1,6 +1,11 @@ package com.iluwatar; +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; @@ -19,8 +24,21 @@ public class Spell extends BaseEntity { this.name = name; } + @Id + @GeneratedValue + @Column(name = "SPELL_ID") + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + @ManyToOne - @JoinColumn(name="SPELLBOOK_ID_FK", referencedColumnName="ID") + @JoinColumn(name="SPELLBOOK_ID_FK", referencedColumnName="SPELLBOOK_ID") private Spellbook spellbook; public String getName() { @@ -31,6 +49,14 @@ public class Spell extends BaseEntity { this.name = name; } + public Spellbook getSpellbook() { + return spellbook; + } + + public void setSpellbook(Spellbook spellbook) { + this.spellbook = spellbook; + } + @Override public String toString() { return name; diff --git a/dao/src/main/java/com/iluwatar/Spellbook.java b/dao/src/main/java/com/iluwatar/Spellbook.java index aab0075f6..63b7de0b7 100644 --- a/dao/src/main/java/com/iluwatar/Spellbook.java +++ b/dao/src/main/java/com/iluwatar/Spellbook.java @@ -4,7 +4,13 @@ import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; +import javax.persistence.Column; 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; @@ -23,13 +29,26 @@ public class Spellbook extends BaseEntity { this.name = name; } + @Id + @GeneratedValue + @Column(name = "SPELLBOOK_ID") + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + private String name; @ManyToOne - @JoinColumn(name="WIZARD_ID_FK", referencedColumnName="ID") + @JoinColumn(name="WIZARD_ID_FK", referencedColumnName="WIZARD_ID") private Wizard wizard; - @OneToMany(mappedBy = "spellbook", orphanRemoval = true, cascade = CascadeType.ALL) + @OneToMany(mappedBy = "spellbook", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL) private Set spells; public String getName() { diff --git a/dao/src/main/java/com/iluwatar/Wizard.java b/dao/src/main/java/com/iluwatar/Wizard.java index 984b5058e..c75f549c6 100644 --- a/dao/src/main/java/com/iluwatar/Wizard.java +++ b/dao/src/main/java/com/iluwatar/Wizard.java @@ -4,7 +4,13 @@ import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; +import javax.persistence.Column; 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; @@ -20,10 +26,23 @@ public class Wizard extends BaseEntity { this(); this.name = name; } + + @Id + @GeneratedValue + @Column(name = "WIZARD_ID") + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } private String name; - @OneToMany(mappedBy = "wizard", orphanRemoval = true, cascade = CascadeType.ALL) + @OneToMany(mappedBy = "wizard", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL) private Set spellbooks; public String getFirstName() {