From 2a536d14997de21fad59d8bb973a7310d7dd6070 Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sun, 5 Jul 2015 13:04:41 +0200 Subject: [PATCH] @onetomany --> embedabble --- .../mi/sda1/sql2catalog/RdbmsAccess.java | 6 +- .../sda1/sql2catalog/model/Description.java | 66 +++++-------------- .../mi/sda1/sql2catalog/model/Product.java | 10 ++- .../test/java/rdbms2catalog/TestSchema.java | 10 +-- .../rdbms2catalog/TestSchemaConflict.java | 37 ----------- 5 files changed, 30 insertions(+), 99 deletions(-) delete mode 100644 P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchemaConflict.java diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java index 4852ef1fd..82f0c005a 100644 --- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java +++ b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java @@ -51,12 +51,12 @@ public class RdbmsAccess { transaction.commit(); } - private void addDescriptions(final List<Description> desccriptions, final Element productElement) { + private void addDescriptions(final List<Description> descriptions, final Element productElement) { - for(Description d: desccriptions) { + for(final Description d: descriptions) { final Element descriptionElement = new Element("description"); productElement.addContent(descriptionElement); - descriptionElement.addContent(d.getText()); + descriptionElement.addContent(d.getDescription()); } } } \ No newline at end of file diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java index 05a778664..6a068c000 100644 --- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java +++ b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java @@ -1,60 +1,24 @@ package de.hdm_stuttgart.mi.sda1.sql2catalog.model; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +import javax.persistence.Embeddable; -@Table( - uniqueConstraints= - @UniqueConstraint(columnNames={"product", "orderIndex"}) - ) -@Entity -public class Description { +// Class not strictly required but allows for relational table's +// attribute name "description" in favour of "descriptions" - @Id - @GeneratedValue - Long id; +@Embeddable +public class Description { - protected Description(){} - - public Description (final Product product, final int orderIndex, final String text) { - this.product = product; - this.orderIndex = orderIndex; - this.text = text; - product.descriptions.add(this); - } - - @ManyToOne - @JoinColumn(name="product") - Product product; - - int orderIndex; - - @Column(nullable = false) - String text; - - public int getOrderIndex() { - return orderIndex; - } - - public void setOrderIndex(int orderIndex) { - this.orderIndex = orderIndex; - } - - public String getText() { - return text; + protected Description() {} + + public Description(final String description) { + this.description = description; } - - public void setText(String text) { - this.text = text; + String description; + public String getDescription() { + return description; } - public Product getProduct() { - return product; + public void setDescription(String description) { + this.description = description; } -} +} \ No newline at end of file diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java index 90f2eaa30..40b290ca8 100644 --- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java +++ b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java @@ -3,11 +3,13 @@ package de.hdm_stuttgart.mi.sda1.sql2catalog.model; import java.util.ArrayList; import java.util.List; -import javax.persistence.CascadeType; +import javax.persistence.CollectionTable; import javax.persistence.Column; +import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; -import javax.persistence.OneToMany; +import javax.persistence.JoinColumn; +import javax.persistence.OrderColumn; @Entity public class Product { @@ -28,7 +30,9 @@ public class Product { Integer age; - @OneToMany(mappedBy = "product", cascade=CascadeType.ALL) + @ElementCollection + @CollectionTable(name="Description", joinColumns={@JoinColumn(name="product")}) + @OrderColumn(name="orderIndex") List<Description> descriptions = new ArrayList<Description>(); public int getId() { diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchema.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchema.java index 896f0d3cf..6473e0ec6 100644 --- a/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchema.java +++ b/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchema.java @@ -26,13 +26,13 @@ public class TestSchema { transaction.begin(); final Product monkeyPickedTea = new Product(1, "Monkey Picked Tea", null); - new Description(monkeyPickedTea, 0, "Picked only by specially trained monkeys"); - new Description(monkeyPickedTea, 1, "Rare wild Chinese tea"); + monkeyPickedTea.getDescriptions().add(new Description("Picked by specially trained monkeys")); + monkeyPickedTea.getDescriptions().add(new Description("Rare wild Chinese tea")); final Product instantTent = new Product(2, "4-Person Instant Tent", 15); - new Description(instantTent, 0, "Exclusive WeatherTec system."); - new Description(instantTent, 1, "4-person, 1-compartment tent"); - new Description(instantTent, 2, "Pre-attached tent poles"); + instantTent.getDescriptions().add(new Description("Exclusive WeatherTec system.")); + instantTent.getDescriptions().add(new Description("4-person, 1-compartment tent")); + instantTent.getDescriptions().add(new Description("Pre-attached tent poles")); em.persist(monkeyPickedTea); em.persist(instantTent); diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchemaConflict.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchemaConflict.java deleted file mode 100644 index e89bbd218..000000000 --- a/P/Sda1/Jpa/rdbms2catalog/solution/src/test/java/rdbms2catalog/TestSchemaConflict.java +++ /dev/null @@ -1,37 +0,0 @@ -package rdbms2catalog; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.Persistence; - -import org.junit.Test; - -import de.hdm_stuttgart.mi.sda1.sql2catalog.model.Description; -import de.hdm_stuttgart.mi.sda1.sql2catalog.model.Product; - -public class TestSchemaConflict { - - static final EntityManager em; - - static { - final EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("create-drop"); - em = emFactory.createEntityManager(); - } - - @Test(expected=javax.persistence.PersistenceException.class) - public void insertData() { - { - final EntityTransaction transaction = em.getTransaction(); - transaction.begin(); - - final Product monkeyPickedTea = new Product(1, "Monkey Picked Tea", null); - new Description(monkeyPickedTea, 0, "Picked only by specially trained monkeys"); - new Description(monkeyPickedTea, 0, "Rare wild Chinese tea"); // oops! Unique key violation - - em.persist(monkeyPickedTea); - - transaction.commit(); - } - } -} \ No newline at end of file -- GitLab