diff --git a/Doc/Sda1/Ref/src/rdbms2catalog.jpa.skeleton.zip b/Doc/Sda1/Ref/src/rdbms2catalog.jpa.skeleton.zip deleted file mode 100644 index 50ae5f1b69797913c10a10bec021afac30693d9f..0000000000000000000000000000000000000000 Binary files a/Doc/Sda1/Ref/src/rdbms2catalog.jpa.skeleton.zip and /dev/null differ diff --git a/Doc/Sda1/jdbc.xml b/Doc/Sda1/jdbc.xml index 7b29a0c370921a6f036109755f4bcfa605af3c90..517e205e4029e3112da155fea6fed3843e1ed20a 100644 --- a/Doc/Sda1/jdbc.xml +++ b/Doc/Sda1/jdbc.xml @@ -3532,42 +3532,76 @@ CREATE TABLE Description ( -- A single product lacking age property -- INSERT INTO Product (id, name) VALUES (1, 'Monkey Picked Tea'); -INSERT INTO Description VALUES(1, 0, 'Picked only by specially trained monkeys'); -INSERT INTO Description VALUES(1, 1, 'Rare wild Chinese tea'); +INSERT INTO Description VALUES(1, 0, 'Picked only by specially trained monkeys.'); +INSERT INTO Description VALUES(1, 1, 'Rare wild Chinese tea.'); INSERT INTO Product VALUES (2, '4-Person Instant Tent', 15); INSERT INTO Description VALUES(2, 0, 'Exclusive WeatherTec system.'); -INSERT INTO Description VALUES(2, 1, '4-person, 1-compartment tent'); -INSERT INTO Description VALUES(2, 2, 'Pre-attached tent poles');</programlisting> +INSERT INTO Description VALUES(2, 1, '4-person, 1-compartment tent.'); +INSERT INTO Description VALUES(2, 2, 'Pre-attached tent poles.');</programlisting> - <para>Write a <xref linkend="glo_JDBC"/> application which - reads from your RDBMS data and exports a corresponding <xref - linkend="glo_XML"/> instance:</para> + <orderedlist> + <listitem> + <para>Explain the ratio of the <code>UNIQUE(product, + orderIndex)</code> constraint in + <classname>Description</classname>.</para> + </listitem> + + <listitem> + <para>Write a <xref linkend="glo_JDBC"/> application which + reads from your RDBMS data and exports a corresponding + <xref linkend="glo_XML"/> instance:</para> - <programlisting language="xml"><catalog> + <programlisting language="xml"><catalog> <product id="1"> <name>Monkey Picked Tea</name> <description>Picked only by specially trained monkeys</description> - <description>Rare wild Chinese tea</description> + <description>Rare wild Chinese tea.</description> </product> <product id="2"> <name>4-Person Instant Tent</name> <description>Exclusive WeatherTec system.</description> - <description>4-person, 1-compartment tent</description> - <description>Pre-attached tent poles</description> + <description>4-person, 1-compartment tent.</description> + <description>Pre-attached tent poles.</description> <age>15</age> </product> </catalog></programlisting> - <para>Use <link - xlink:href="https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html">PreparedStatement</link> - instances throughout your application.</para> + <para>Use <link + xlink:href="https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html">PreparedStatement</link> + instances throughout your application.</para> + </listitem> + </orderedlist> </question> <answer> - <annotation role="make"> - <para role="eclipse">Sda1/rdbms2catalog</para> - </annotation> + <orderedlist> + <listitem> + <para>Without <code>UNIQUE(product, orderIndex)</code> the + following state would become possible:</para> + + <programlisting language="none">+---------+------------------------------+------------+ +| product | text | orderIndex | ++---------+------------------------------+------------+ +| ... | ... | ... | +| 2 | Exclusive WeatherTec system. | 1 | +| 2 | 4-person, 1-compartment tent.| 1 | +| ... | ... | ... | ++---------+------------------------------+------------+</programlisting> + + <para>The presence of two distinct descriptions having + identical orderIndex does not enforce the required + order.</para> + </listitem> + + <listitem> + <para>See:</para> + + <annotation role="make"> + <para role="eclipse">Sda1/rdbms2catalog</para> + </annotation> + </listitem> + </orderedlist> </answer> </qandaentry> </qandadiv> diff --git a/Doc/Sda1/jpaintro.xml b/Doc/Sda1/jpaintro.xml index d75b1fed370511a4d14e848b654533985690c729..12bf9e209ba21874a37e978ab766c3ff01d92eb7 100644 --- a/Doc/Sda1/jpaintro.xml +++ b/Doc/Sda1/jpaintro.xml @@ -326,16 +326,18 @@ TRACE [main] sql.BasicBinder (BasicBinder.java:65) - binding parameter [1] as [V <question> <para>In <xref linkend="sda1SectRelationadatal2Xml"/> you exported RDBMS data to <xref linkend="glo_XML"/> by means of <xref - linkend="glo_JDBC"/>.</para> - - <para>In this exercise we want to facilitate the database reading - part by using <xref linkend="glo_JPA"/>. You may follow the - subsequently described steps:</para> + linkend="glo_JDBC"/>. In this follow up exercise <xref + linkend="glo_JPA"/> will be used facilitating the database reading + part following:</para> <orderedlist> <listitem> - <para>Import the Maven skeleton project <link - xlink:href="/Sda1/Ref/src/rdbms2catalog.jpa.skeleton.zip">rdbms2catalog.jpa.skeleton.zip</link>.</para> + <para>Import the following (standalone) Maven skeleton project + into your workspace:</para> + + <annotation role="make"> + <para role="eclipse">Sda1/Jpa/rdbms2catalog/skeleton</para> + </annotation> </listitem> <listitem> @@ -348,17 +350,30 @@ TRACE [main] sql.BasicBinder (BasicBinder.java:65) - binding parameter [1] as [V <tip> <para>Since <classname>Description</classname> instances are composites with respect to <classname>Product</classname> - you might want to use <interfacename + (Composition rather than aggregation or association) you + might want to use <interfacename xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection">@ElementCollection</interfacename> in favour of <interfacename xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/ManyToOne">@ManyToOne</interfacename> - / <interfacename + and <interfacename xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/OneToMany">@OneToMany</interfacename>.</para> </tip> - <para>Test your implementation by uncommenting the test - method's body in - <classname>rdbms2catalog.TestSchema</classname>.</para> + <tip> + <para>Regarding ordering of descriptions you may want to + read <interfacename + xlink:href="http://docs.oracle.com/javaee/7/api/javax/persistence/OrderColumn.html">@OrderColumn</interfacename>'s + documentation.</para> + </tip> + </listitem> + + <listitem> + <para>The <xref linkend="glo_Junit"/> test class + <classname>rdbms2catalog.TestSchema</classname> does contain + <xref linkend="glo_JPA"/> data inserting code being commented + out. Having your data model completed you may uncomment these. + Test execution will then populate your database with sample + data.</para> </listitem> <listitem> @@ -367,11 +382,12 @@ TRACE [main] sql.BasicBinder (BasicBinder.java:65) - binding parameter [1] as [V <tip> <para><filename>META-INF/persistence.xml</filename> does - contain a second persistence unit definition - <property>name="none"</property> which does not alter the - database schema. Since your tests already inserted required - test data you may use this alternate configuration for using - your RDBMS as a data source.</para> + contain a second persistence unit + <quote>strategy_none</quote> which does not alter the + database schema. Since your tests already created a schema + and inserted required test data you may use this alternate + configuration for reading from your RDBMS data + source.</para> </tip> </listitem> </orderedlist> diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml b/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml index b8bb6115c348e45dbe35e6caf5c005140d43089f..0be8114f26ab91c2cc492868a59d7faaa3393eb5 100644 --- a/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml +++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml @@ -2,15 +2,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>de.hdm-stuttgart.mi</groupId> - <artifactId>lecturenotes-pom</artifactId> - <version>1.0</version> - <relativePath>../../../../pom.xml</relativePath> - </parent> - <groupId>de.hdm-stuttgart.mi.sda1</groupId> - <artifactId>rdbms2catalog</artifactId> + <artifactId>rdbms2catalog-skeleton</artifactId> <version>0.9</version> <packaging>jar</packaging> @@ -28,6 +21,7 @@ <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> + <version>5.1.39</version> </dependency> <dependency> @@ -54,7 +48,7 @@ <dependency> <groupId>org.jdom</groupId> <artifactId>jdom2</artifactId> - <version>${org.jdom.jdom2.version}</version> + <version>2.0.6</version> </dependency> </dependencies> @@ -139,7 +133,7 @@ <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> - <Main-Class>jpaintro.university.CreateEntity</Main-Class> + <Main-Class>de.hdm_stuttgart.mi.sda1.sql2catalog.Rdbms2Xml</Main-Class> </manifestEntries> </transformer> </transformers> @@ -156,4 +150,4 @@ </plugins> </build> -</project> +</project> \ No newline at end of file diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java index 4f3187ef437d3565d6598a994839d489f6b64e4d..753fe59db21f2ea487639d0ad195e522031a0585 100644 --- a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java +++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java @@ -8,8 +8,5 @@ import javax.persistence.Id; public class Description { @Id - @GeneratedValue Long id; - - } diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml index 99110e6f430c683cb54e4d1174c5a7d2491cb863..964be2ed9fad5171ab9ddfd241cdb423b7ab6686 100644 --- a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml +++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml @@ -1,54 +1,62 @@ -<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" +<persistence + version="2.1" + xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence - http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" - version="2.1"> + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence + http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> - <persistence-unit name="drop-create" transaction-type="RESOURCE_LOCAL"> + <persistence-unit name = "strategy_drop-and-create"> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> - <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> - <property name="javax.persistence.jdbc.user" value="hdmuser"/> - <property name="javax.persistence.jdbc.password" value="XYZ"/> + <!-- + JDBC database connection parameter + --> + + <property name = "javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> + <property name = "javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> + <property name = "javax.persistence.jdbc.user" value="hdmuser"/> + <property name = "javax.persistence.jdbc.password" value="XYZ"/> <property - name="javax.persistence.schema-generation.database.action" + name = "javax.persistence.schema-generation.database.action" value="drop-and-create"/> - <property name="hibernate.format_sql" value="true"/> - <property name="hibernate.use_sql_comments" value="true"/> + <property name = "hibernate.show_sql" value = "true" /> + <property name = "hibernate.format_sql" value="true"/> + <property name = "hibernate.use_sql_comments" value="true"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> + <property name = "hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> - <property name="hibernate.archive.autodetection" value="class"/> + <property name = "hibernate.archive.autodetection" value="class"/> </properties> </persistence-unit> - <persistence-unit name="update" transaction-type="RESOURCE_LOCAL"> + <persistence-unit name = "strategy_none"> + <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> - <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> - <property name="javax.persistence.jdbc.user" value="hdmuser"/> - <property name="javax.persistence.jdbc.password" value="XYZ"/> + <property name = "javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> + <property name = "javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> + <property name = "javax.persistence.jdbc.user" value="hdmuser"/> + <property name = "javax.persistence.jdbc.password" value="XYZ"/> <property - name="javax.persistence.schema-generation.database.action" - value="update"/> + name = "javax.persistence.schema-generation.database.action" + value="none"/> - <property name="hibernate.format_sql" value="true"/> - <property name="hibernate.use_sql_comments" value="true"/> + <property name = "hibernate.show_sql" value = "true" /> + <property name = "hibernate.format_sql" value="true"/> + <property name = "hibernate.use_sql_comments" value="true"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> + <property name = "hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> - <property name="hibernate.archive.autodetection" value="class"/> + <property name = "hibernate.archive.autodetection" value="class"/> </properties> </persistence-unit> -</persistence> \ No newline at end of file +</persistence> diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java index c1ee7553999ebe69e6950d542cf2586886159078..8066bc23eaf55cde4d9f002188818e632eaa5d15 100644 --- a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java +++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java @@ -12,7 +12,7 @@ public class TestSchema { static final EntityManager em; static { - final EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("drop-create"); + final EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("strategy_drop-and-create"); em = emFactory.createEntityManager(); } @@ -36,6 +36,7 @@ public class TestSchema { // instantTent.getDescriptions().add(new Description("Pre-attached tent poles")); transaction.commit(); + em.close(); em.getEntityManagerFactory().close(); } } diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml b/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml index ede66d9b8e138a1fffddff26143197f4e17cb31d..c674df304d86e2089060e97c79226fc70e2a0be7 100644 --- a/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml +++ b/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml @@ -18,7 +18,6 @@ <name>rdbms2catalogJpa</name> <url>http://www.mi.hdm-stuttgart.de/freedocs</url> - <dependencies> <dependency> @@ -141,7 +140,7 @@ <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> - <Main-Class>jpaintro.university.CreateEntity</Main-Class> + <Main-Class>de.hdm_stuttgart.mi.sda1.sql2catalog.Rdbms2Xml</Main-Class> </manifestEntries> </transformer> </transformers> @@ -158,4 +157,4 @@ </plugins> </build> -</project> +</project> \ No newline at end of file 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 11c0a039487544932eeebed91ae6bff42731180c..a4b3d6321b256c967a22500ce05a0942d82e283d 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 @@ -4,6 +4,7 @@ import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; +import javax.persistence.criteria.CriteriaQuery; import org.jdom2.Element; @@ -15,10 +16,11 @@ import de.hdm_stuttgart.mi.sda1.sql2catalog.model.Product; */ public class RdbmsAccess { + static final EntityManagerFactory emFactory; static final EntityManager em; static { - final EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("update"); + emFactory = Persistence.createEntityManagerFactory("strategy_none"); em = emFactory.createEntityManager(); } @@ -27,26 +29,32 @@ public class RdbmsAccess { * @param root */ public void appendProducts(final Element root) { + + final CriteriaQuery<Product> criteria = emFactory.getCriteriaBuilder().createQuery(Product.class); + criteria.from(Product.class); + final EntityTransaction transaction = em.getTransaction(); - transaction.begin(); + transaction.begin();{ + + for (final Product p: em.createQuery(criteria).getResultList()) { - for (final Product p: em.createQuery("SELECT p FROM Product p", Product.class).getResultList()) { + final Element productElement = new Element("product"); + root.addContent(productElement); + productElement.setAttribute("id", "" + p.getId()); - final Element productElement = new Element("product"); - root.addContent(productElement); - productElement.setAttribute("id", "" + p.getId()); - - System.out.println(p.getName() + "++++++++++++++++++++++++++++++++++++"); + System.out.println(p.getName() + "++++++++++++++++++++++++++++++++++++"); - productElement.addContent(new Element("name").addContent(p.getName())); + productElement.addContent(new Element("name").addContent(p.getName())); - p.getDescriptions().stream().forEach(description -> { - productElement.addContent(new Element("description").addContent(description.getDescription())); - }); + p.getDescriptions().stream().forEach(description -> { + productElement.addContent(new Element("description").addContent(description.getDescription())); + }); - p.getAge().ifPresent(age -> productElement.addContent(new Element("age").addContent(age.toString()))); + p.getAge().ifPresent(age -> productElement.addContent(new Element("age").addContent(age.toString()))); + } } transaction.commit(); - em.getEntityManagerFactory().close(); + em.close(); + emFactory.close(); } } \ 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 0db1072505d9474c84b4311d88fce73a2f993c2b..ff9283a7972dbc73f633c40d70789a185f37acc3 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,5 +1,6 @@ package de.hdm_stuttgart.mi.sda1.sql2catalog.model; +import javax.persistence.Column; import javax.persistence.Embeddable; // Class not strictly required but allows for relational table's @@ -14,7 +15,7 @@ public class Description { public Description(final String description) { setDescription(description); } - + @Column(name="text") String description; public String getDescription() { diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/resources/META-INF/persistence.xml b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/resources/META-INF/persistence.xml index 7d12655f6f583b19c1c2fab8387e6d0cab1e65d5..964be2ed9fad5171ab9ddfd241cdb423b7ab6686 100644 --- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/resources/META-INF/persistence.xml +++ b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/resources/META-INF/persistence.xml @@ -1,52 +1,60 @@ -<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" +<persistence + version="2.1" + xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence - http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" - version="2.1"> + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence + http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> - <persistence-unit name="drop-create" transaction-type="RESOURCE_LOCAL"> + <persistence-unit name = "strategy_drop-and-create"> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> - <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> - <property name="javax.persistence.jdbc.user" value="hdmuser"/> - <property name="javax.persistence.jdbc.password" value="XYZ"/> + <!-- + JDBC database connection parameter + --> + + <property name = "javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> + <property name = "javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> + <property name = "javax.persistence.jdbc.user" value="hdmuser"/> + <property name = "javax.persistence.jdbc.password" value="XYZ"/> <property - name="javax.persistence.schema-generation.database.action" + name = "javax.persistence.schema-generation.database.action" value="drop-and-create"/> - <property name="hibernate.format_sql" value="true"/> - <property name="hibernate.use_sql_comments" value="true"/> + <property name = "hibernate.show_sql" value = "true" /> + <property name = "hibernate.format_sql" value="true"/> + <property name = "hibernate.use_sql_comments" value="true"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> + <property name = "hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> - <property name="hibernate.archive.autodetection" value="class"/> + <property name = "hibernate.archive.autodetection" value="class"/> </properties> </persistence-unit> - <persistence-unit name="update" transaction-type="RESOURCE_LOCAL"> + <persistence-unit name = "strategy_none"> + <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> - <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> - <property name="javax.persistence.jdbc.user" value="hdmuser"/> - <property name="javax.persistence.jdbc.password" value="XYZ"/> + <property name = "javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> + <property name = "javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> + <property name = "javax.persistence.jdbc.user" value="hdmuser"/> + <property name = "javax.persistence.jdbc.password" value="XYZ"/> <property - name="javax.persistence.schema-generation.database.action" - value="update"/> + name = "javax.persistence.schema-generation.database.action" + value="none"/> - <property name="hibernate.format_sql" value="true"/> - <property name="hibernate.use_sql_comments" value="true"/> + <property name = "hibernate.show_sql" value = "true" /> + <property name = "hibernate.format_sql" value="true"/> + <property name = "hibernate.use_sql_comments" value="true"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> + <property name = "hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> - <property name="hibernate.archive.autodetection" value="class"/> + <property name = "hibernate.archive.autodetection" value="class"/> </properties> </persistence-unit> 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 5be0bba7eca3ecb36337b9b169b71b4222df128f..917598381802a70e54a9ec27e43fbb8f95429e4e 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 @@ -15,7 +15,7 @@ public class TestSchema { static final EntityManager em; static { - final EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("drop-create"); + final EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("strategy_drop-and-create"); em = emFactory.createEntityManager(); } @@ -26,18 +26,20 @@ public class TestSchema { transaction.begin(); final Product monkeyPickedTea = new Product(1, "Monkey Picked Tea", null); - monkeyPickedTea.getDescriptions().add(new Description("Picked by specially trained monkeys")); - monkeyPickedTea.getDescriptions().add(new Description("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); 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")); + 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); transaction.commit(); + em.close(); + em.getEntityManagerFactory().close(); } } } \ No newline at end of file