diff --git a/dao/pom.xml b/dao/pom.xml new file mode 100644 index 000000000..40aa93005 --- /dev/null +++ b/dao/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + dao + + + org.hibernate + hibernate-core + + + com.h2database + h2 + + + junit + junit + test + + + diff --git a/dao/src/main/java/com/iluwatar/App.java b/dao/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..3758e41bf --- /dev/null +++ b/dao/src/main/java/com/iluwatar/App.java @@ -0,0 +1,40 @@ +package com.iluwatar; + +import java.util.List; + +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +public class App +{ + public static void main( String[] args ) { + + SessionFactory sessionFactory = new Configuration() + .addAnnotatedClass(Wizard.class) + .addAnnotatedClass(Spellbook.class) + .addAnnotatedClass(Spell.class) + .setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect") + .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") + .buildSessionFactory(); + + Session session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + Wizard wizard = new Wizard(); + wizard.setFirstName("Jugga"); + Spellbook spellbook = new Spellbook(); + Spell spell = new Spell(); + spellbook.getSpells().add(spell); + wizard.getSpellbooks().add(spellbook); + session.persist(wizard); + Query query = session.createQuery("from Wizard"); + List list = query.list(); + Wizard p1 = (Wizard) list.get(0); + System.out.println(String.format("id=%d firstName=%s", p1.getId(), p1.getFirstName())); + session.getTransaction().commit(); + } +} diff --git a/dao/src/main/java/com/iluwatar/BaseEntity.java b/dao/src/main/java/com/iluwatar/BaseEntity.java new file mode 100644 index 000000000..8a6f626b8 --- /dev/null +++ b/dao/src/main/java/com/iluwatar/BaseEntity.java @@ -0,0 +1,27 @@ +package com.iluwatar; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Version; + +@Entity +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 new file mode 100644 index 000000000..fe8d84dcd --- /dev/null +++ b/dao/src/main/java/com/iluwatar/DaoBase.java @@ -0,0 +1,24 @@ +package com.iluwatar; + +public abstract class DaoBase { + + E find(Long id) { + + } + + void persist(E e) { + + } + + E merge(E e) { + + } + + void remove(E e) { + + } + + List findAll() { + + } +} diff --git a/dao/src/main/java/com/iluwatar/Spell.java b/dao/src/main/java/com/iluwatar/Spell.java new file mode 100644 index 000000000..01a78f9da --- /dev/null +++ b/dao/src/main/java/com/iluwatar/Spell.java @@ -0,0 +1,25 @@ +package com.iluwatar; + +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name="SPELL") +public class Spell extends BaseEntity { + + private String name; + + @ManyToOne + @JoinColumn(name="SPELLBOOK_ID_FK", referencedColumnName="ID") + private Spellbook spellbook; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/dao/src/main/java/com/iluwatar/Spellbook.java b/dao/src/main/java/com/iluwatar/Spellbook.java new file mode 100644 index 000000000..d10bc9c49 --- /dev/null +++ b/dao/src/main/java/com/iluwatar/Spellbook.java @@ -0,0 +1,53 @@ +package com.iluwatar; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +@Entity +@Table(name="SPELLBOOK") +public class Spellbook extends BaseEntity { + + public Spellbook() { + spells = new HashSet(); + } + + private String name; + + @ManyToOne + @JoinColumn(name="WIZARD_ID_FK", referencedColumnName="ID") + private Wizard wizard; + + @OneToMany(mappedBy = "spellbook", orphanRemoval = true, cascade = CascadeType.ALL) + private Set spells; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Wizard getWizard() { + return wizard; + } + + public void setWizard(Wizard wizard) { + this.wizard = wizard; + } + + public Set getSpells() { + return spells; + } + + public void setSpells(Set spells) { + this.spells = spells; + } +} diff --git a/dao/src/main/java/com/iluwatar/Wizard.java b/dao/src/main/java/com/iluwatar/Wizard.java new file mode 100644 index 000000000..678d7d39e --- /dev/null +++ b/dao/src/main/java/com/iluwatar/Wizard.java @@ -0,0 +1,39 @@ +package com.iluwatar; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +@Entity +@Table(name="WIZARD") +public class Wizard extends BaseEntity { + + public Wizard() { + spellbooks = new HashSet(); + } + + private String firstName; + + @OneToMany(mappedBy = "wizard", orphanRemoval = true, cascade = CascadeType.ALL) + private Set spellbooks; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public Set getSpellbooks() { + return spellbooks; + } + + public void setSpellbooks(Set spellbooks) { + this.spellbooks = spellbooks; + } +} diff --git a/dao/src/test/java/com/iluwatar/AppTest.java b/dao/src/test/java/com/iluwatar/AppTest.java new file mode 100644 index 000000000..a625cec70 --- /dev/null +++ b/dao/src/test/java/com/iluwatar/AppTest.java @@ -0,0 +1,4 @@ +package com.iluwatar; + +public class AppTest { +} diff --git a/pom.xml b/pom.xml index 33b34296f..4816f46d2 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,9 @@ UTF-8 + 5.0.0.Beta1 + 1.4.187 + 4.12 abstract-factory @@ -46,14 +49,25 @@ intercepting-filter poison-pill lazy-loading + dao + + org.hibernate + hibernate-core + ${hibernate.version} + + + com.h2database + h2 + ${h2.version} + junit junit - 4.11 + ${junit.version} test