diff --git a/README.md b/README.md new file mode 100644 index 0000000..1275424 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Java-EE +======= + +Repository for various Java EE related applications diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/ShapeRepository.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/ShapeRepository.java new file mode 100644 index 0000000..e09c1a2 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/ShapeRepository.java @@ -0,0 +1,39 @@ +package biz.hahamo.dev.enterprise.example; + +import java.io.Serializable; +import java.util.List; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import biz.hahamo.dev.enterprise.example.joined.ShapeJoined; +import biz.hahamo.dev.enterprise.example.singletable.ShapeSingletable; +import biz.hahamo.dev.enterprise.example.tableperclass.ShapePerclass; + +@Stateless +public class ShapeRepository { + + @PersistenceContext + private EntityManager em; + + public List findAllJoined() { + return em.createQuery("SELECT s FROM ShapeJoined s", ShapeJoined.class).getResultList(); + } + + public List findAllSingletable() { + return em.createQuery("SELECT s FROM ShapeSingletable s", ShapeSingletable.class).getResultList(); + } + + public List findAllPerclass() { + return em.createQuery("SELECT s FROM ShapePerclass s", ShapePerclass.class).getResultList(); + } + + public void save(Serializable entity) { + em.persist(entity); + } + + public T find(Class entityClass, String idString) { + return em.find(entityClass, idString); + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/TestBean.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/TestBean.java new file mode 100644 index 0000000..6a49ab0 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/TestBean.java @@ -0,0 +1,104 @@ +/** + * + */ +package biz.hahamo.dev.enterprise.example; + +import java.util.List; + +import javax.faces.bean.SessionScoped; +import javax.faces.event.ActionEvent; +import javax.inject.Inject; + +import biz.hahamo.dev.enterprise.example.joined.CircleJoined; +import biz.hahamo.dev.enterprise.example.joined.ShapeJoined; +import biz.hahamo.dev.enterprise.example.joined.TriangleJoined; +import biz.hahamo.dev.enterprise.example.singletable.CircleSingletable; +import biz.hahamo.dev.enterprise.example.singletable.ShapeSingletable; +import biz.hahamo.dev.enterprise.example.singletable.TriangleSingletable; +import biz.hahamo.dev.enterprise.example.tableperclass.CirclePerclass; +import biz.hahamo.dev.enterprise.example.tableperclass.ShapePerclass; +import biz.hahamo.dev.enterprise.example.tableperclass.TrianglePerclass; + +/** + * This is a simple test bean to make the connection between the GUI and the repository. + * + * @author GHajba + */ +@SessionScoped +public class TestBean { + + @Inject + private ShapeRepository repo; + + public TestBean() { + } + + public void testJoined(ActionEvent event) { + + System.out.println("Test Joined inheritance"); + + List resultList = repo.findAllJoined(); + System.out.println(resultList.size()); + // here should come 2 times CircleJoined if you use only the built-in test data generation + for (ShapeJoined s : resultList) { + System.out.println(s.getClass()); + ShapeJoined entity = repo.find(s.getClass(), s.getIdString()); + System.out.println(entity); + } + System.out.println("--------------\n"); + } + + public void testSingletable(ActionEvent event) { + + List resultList = repo.findAllSingletable(); + System.out.println(resultList.size()); + for (ShapeSingletable s : resultList) { + System.out.println(s.getClass()); + System.out.println(repo.find(s.getClass(), s.getIdString())); + } + System.out.println("--------------\n"); + + } + + public void testPerclass(ActionEvent event) { + + List resultList = repo.findAllPerclass(); + System.out.println(resultList.size()); + for (ShapePerclass s : resultList) { + System.out.println(s.getClass()); + System.out.println(repo.find(s.getClass(), s.getIdString())); + } + System.out.println("--------------\n"); + + } + + public void createEntities(ActionEvent event) { + CircleJoined circleJoined = new CircleJoined(); + circleJoined.setIdString("joinedTest"); + circleJoined.setRadius(123); + TriangleJoined notReallyACircle = new TriangleJoined(); + notReallyACircle.setEqualSites(false); + notReallyACircle.setIdString("a triangle shaped circle?"); + + CircleSingletable circleSingletable = new CircleSingletable(); + circleSingletable.setIdString("singletableTest"); + circleSingletable.setRadius(234); + TriangleSingletable nowATriangle = new TriangleSingletable(); + nowATriangle.setIdString("a triangle shaped triangle"); + nowATriangle.setEqualSites(true); + + CirclePerclass circlePerclass = new CirclePerclass(); + circlePerclass.setIdString("perclassTest"); + circlePerclass.setRadius(456); + TrianglePerclass trianglePerclass = new TrianglePerclass(); + trianglePerclass.setEqualSites(false); + trianglePerclass.setIdString("a single triangle"); + + repo.save(circleJoined); + repo.save(notReallyACircle); + repo.save(circlePerclass); + repo.save(trianglePerclass); + repo.save(circleSingletable); + repo.save(nowATriangle); + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/CircleJoined.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/CircleJoined.java new file mode 100644 index 0000000..9cab0ed --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/CircleJoined.java @@ -0,0 +1,28 @@ +package biz.hahamo.dev.enterprise.example.joined; + +import javax.persistence.Entity; + +@Entity +// @DiscriminatorValue(value = "CircleJoined") +// @Table(name = "CIRCLE_JOINED") +public class CircleJoined extends ShapeJoined { + + private static final long serialVersionUID = 667923770892268408L; + + // @Column(name = "RADIUS") + private Integer radius; + + public Integer getRadius() { + return radius; + } + + public void setRadius(Integer radius) { + this.radius = radius; + } + + @Override + public String toString() { + return super.toString() + " / radius: " + radius; + } + +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/ShapeJoined.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/ShapeJoined.java new file mode 100644 index 0000000..68ca357 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/ShapeJoined.java @@ -0,0 +1,34 @@ +package biz.hahamo.dev.enterprise.example.joined; + +import java.io.Serializable; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +@DiscriminatorColumn(name = "TYPE") +// @Table(name = "SHAPE_JOINED") +public abstract class ShapeJoined implements Serializable { + + private static final long serialVersionUID = 8917616829186723579L; + + @Id + private String idString; + + public String getIdString() { + return idString; + } + + public void setIdString(String idString) { + this.idString = idString; + } + + @Override + public String toString() { + return "idString: " + idString; + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/TriangleJoined.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/TriangleJoined.java new file mode 100644 index 0000000..8f54cc4 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/joined/TriangleJoined.java @@ -0,0 +1,28 @@ +package biz.hahamo.dev.enterprise.example.joined; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +@Entity +@DiscriminatorValue("CircleJoined") +// @Table(name = "TRIANGLE_JOINED") +public class TriangleJoined extends ShapeJoined { + + private static final long serialVersionUID = -1783113903772499963L; + + // @Column(name = "EQUAL_SITES") + private Boolean equalSites; + + public Boolean getEqualSites() { + return equalSites; + } + + public void setEqualSites(Boolean equalSites) { + this.equalSites = equalSites; + } + + @Override + public String toString() { + return super.toString() + " / equalSites: " + equalSites; + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/CircleSingletable.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/CircleSingletable.java new file mode 100644 index 0000000..154dc53 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/CircleSingletable.java @@ -0,0 +1,26 @@ +package biz.hahamo.dev.enterprise.example.singletable; + +import javax.persistence.Entity; + +@Entity +// @DiscriminatorValue(value = "CIRCLE") +public class CircleSingletable extends ShapeSingletable { + + private static final long serialVersionUID = 667923770892268408L; + + // @Column(name = "RADIUS") + private Integer radius; + + public Integer getRadius() { + return radius; + } + + public void setRadius(Integer radius) { + this.radius = radius; + } + + @Override + public String toString() { + return super.toString() + " / radius: " + radius; + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/ShapeSingletable.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/ShapeSingletable.java new file mode 100644 index 0000000..54f19c7 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/ShapeSingletable.java @@ -0,0 +1,34 @@ +package biz.hahamo.dev.enterprise.example.singletable; + +import java.io.Serializable; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name = "TYPE") +// @Table(name = "SHAPE_SINGLETABLE") +public abstract class ShapeSingletable implements Serializable { + + private static final long serialVersionUID = 8917616829186723579L; + + @Id + private String idString; + + public String getIdString() { + return idString; + } + + public void setIdString(String idString) { + this.idString = idString; + } + + @Override + public String toString() { + return "idString: " + idString; + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/TriangleSingletable.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/TriangleSingletable.java new file mode 100644 index 0000000..c4d6c89 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/singletable/TriangleSingletable.java @@ -0,0 +1,27 @@ +package biz.hahamo.dev.enterprise.example.singletable; + +import javax.persistence.Entity; + +@Entity +// @DiscriminatorValue("CircleSingletable") // won't work out: Hibernate throws an exception at startup +// @Table(name = "TRIANGLE_SINGLE") +public class TriangleSingletable extends ShapeSingletable { + + private static final long serialVersionUID = -1783113903772499963L; + + // @Column(name = "EQUAL_SITES") + private Boolean equalSites; + + public Boolean getEqualSites() { + return equalSites; + } + + public void setEqualSites(Boolean equalSites) { + this.equalSites = equalSites; + } + + @Override + public String toString() { + return super.toString() + " / equalSites: " + equalSites; + } +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/CirclePerclass.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/CirclePerclass.java new file mode 100644 index 0000000..b331703 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/CirclePerclass.java @@ -0,0 +1,27 @@ +package biz.hahamo.dev.enterprise.example.tableperclass; + +import javax.persistence.Entity; + +@Entity +// @Table(name = "CIRCLE_PERCLASS") +public class CirclePerclass extends ShapePerclass { + + private static final long serialVersionUID = 667923770892268408L; + + // @Column(name = "RADIUS") + private Integer radius; + + public Integer getRadius() { + return radius; + } + + public void setRadius(Integer radius) { + this.radius = radius; + } + + @Override + public String toString() { + return super.toString() + " / radius: " + radius; + } + +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/ShapePerclass.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/ShapePerclass.java new file mode 100644 index 0000000..dd5ec0d --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/ShapePerclass.java @@ -0,0 +1,32 @@ +package biz.hahamo.dev.enterprise.example.tableperclass; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public abstract class ShapePerclass implements Serializable { + + private static final long serialVersionUID = 8917616829186723579L; + + @Id + private String idString; + + public String getIdString() { + return idString; + } + + public void setIdString(String idString) { + this.idString = idString; + } + + @Override + public String toString() { + return "idString: " + idString; + } + +} diff --git a/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/TrianglePerclass.java b/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/TrianglePerclass.java new file mode 100644 index 0000000..835e966 --- /dev/null +++ b/example/src/main/java/biz/hahamo/dev/enterprise/example/tableperclass/TrianglePerclass.java @@ -0,0 +1,26 @@ +package biz.hahamo.dev.enterprise.example.tableperclass; + +import javax.persistence.Entity; + +@Entity +// @Table(name = "TRIANGLE_PERCLASS") +public class TrianglePerclass extends ShapePerclass { + + private static final long serialVersionUID = -1783113903772499963L; + + // @Column(name = "EQUAL_SITES") + private Boolean equalSites; + + public Boolean getEqualSites() { + return equalSites; + } + + public void setEqualSites(Boolean equalSites) { + this.equalSites = equalSites; + } + + @Override + public String toString() { + return super.toString() + " / equalSites: " + equalSites; + } +} diff --git a/example/src/main/resources/META-INF/persistence.xml b/example/src/main/resources/META-INF/persistence.xml index caccbfc..bca1817 100644 --- a/example/src/main/resources/META-INF/persistence.xml +++ b/example/src/main/resources/META-INF/persistence.xml @@ -29,7 +29,8 @@ - + + diff --git a/example/src/main/resources/scripts/table_ddl.sql b/example/src/main/resources/scripts/table_ddl.sql new file mode 100644 index 0000000..e334286 --- /dev/null +++ b/example/src/main/resources/scripts/table_ddl.sql @@ -0,0 +1,8 @@ +create table shapejoined (idString varchar(255 char) primary key); +create table trianglejoined(idString varchar(255 char) primary key, equalsites boolean); +create table circlejoined(idString varchar(255 char) primary key, radius number); + +create table shapesingletable(idString varchar(255 char) primary key, dtype varchar(25 char), equalsites boolean, radius number); + +create table triangleperclass(idString varchar(255 char) primary key, equalsites boolean); +create table circleperclass(idString varchar(255 char) primary key, radius number); \ No newline at end of file diff --git a/example/src/main/resources/scripts/testdata.sql b/example/src/main/resources/scripts/testdata.sql new file mode 100644 index 0000000..7fca38a --- /dev/null +++ b/example/src/main/resources/scripts/testdata.sql @@ -0,0 +1,10 @@ +insert into ShapeJoined (idstring) values('1'); +insert into ShapeJoined (idstring) values('2'); +insert into CircleJoined (idstring, radius) values('1', 5); +insert into TriangleJoined ( idstring , equal_sites ) values('2', 1); + +insert into ShapeSingletable (idString, dtype, radius, equalsites) values ('1', 'CircleJoined', 42, null); +insert into ShapeSingletable (idString, dtype, radius, equalsites) values ('2', 'TriangleJoined', null, 0); + +insert into CirclePerclass (idString, radius) values('1', 23); +insert into TrianglePerclass (idString, equalsites) values('2', 1); \ No newline at end of file diff --git a/example/src/main/webapp/WEB-INF/.faces-config.xml.jsfdia b/example/src/main/webapp/WEB-INF/.faces-config.xml.jsfdia new file mode 100644 index 0000000..213b31e --- /dev/null +++ b/example/src/main/webapp/WEB-INF/.faces-config.xml.jsfdia @@ -0,0 +1,5 @@ + + + + diff --git a/example/src/main/webapp/WEB-INF/example-ds.xml b/example/src/main/webapp/WEB-INF/example-ds.xml index b2832cf..f47eace 100644 --- a/example/src/main/webapp/WEB-INF/example-ds.xml +++ b/example/src/main/webapp/WEB-INF/example-ds.xml @@ -26,7 +26,7 @@ - jdbc:h2:file:example + jdbc:h2:file:example;DB_CLOSE_ON_EXIT=FALSE h2 sa diff --git a/example/src/main/webapp/WEB-INF/faces-config.xml b/example/src/main/webapp/WEB-INF/faces-config.xml index fd4b3df..d43e374 100644 --- a/example/src/main/webapp/WEB-INF/faces-config.xml +++ b/example/src/main/webapp/WEB-INF/faces-config.xml @@ -14,17 +14,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ---> - - - - - + + + testBean + biz.hahamo.dev.enterprise.example.TestBean + request + + - diff --git a/example/src/main/webapp/WEB-INF/templates/Template.xhtml b/example/src/main/webapp/WEB-INF/templates/Template.xhtml new file mode 100644 index 0000000..46ca454 --- /dev/null +++ b/example/src/main/webapp/WEB-INF/templates/Template.xhtml @@ -0,0 +1,32 @@ + + + + <ui:insert name="title">Default title</ui:insert> + + + + + + + + +
+ + +
+ + + + + + diff --git a/example/src/main/webapp/WEB-INF/templates/footer.xhtml b/example/src/main/webapp/WEB-INF/templates/footer.xhtml new file mode 100644 index 0000000..10b2e8c --- /dev/null +++ b/example/src/main/webapp/WEB-INF/templates/footer.xhtml @@ -0,0 +1,11 @@ + + + + + +GHajba's JPA 2.0 Table Inheritance Example + + +
+ + diff --git a/example/src/main/webapp/WEB-INF/templates/header.xhtml b/example/src/main/webapp/WEB-INF/templates/header.xhtml new file mode 100644 index 0000000..a028562 --- /dev/null +++ b/example/src/main/webapp/WEB-INF/templates/header.xhtml @@ -0,0 +1,7 @@ + + + + +
Table inheritance example
+ + diff --git a/example/src/main/webapp/index.html b/example/src/main/webapp/index.html index 3368e9c..d482d6f 100644 --- a/example/src/main/webapp/index.html +++ b/example/src/main/webapp/index.html @@ -4,7 +4,7 @@ Start Page - +

Hello World!

diff --git a/example/src/main/webapp/test.xhtml b/example/src/main/webapp/test.xhtml new file mode 100644 index 0000000..6eb1e77 --- /dev/null +++ b/example/src/main/webapp/test.xhtml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file