From 9e5b78b712826c3e9d93a860674ff1cae7d9bb0c Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sat, 7 Jan 2017 23:26:44 +0100 Subject: [PATCH] Criteria / metamodel support --- .../META-INF/maven/archetype-metadata.xml | 3 +- .../resources/archetype-resources/Readme.md | 15 +++++ .../resources/archetype-resources/pom.xml | 65 +++++++++++++++++-- .../src/main/java/SearchByIcao.java | 65 +++++++++++++++++++ .../src/main/java/model/Airline.java | 4 ++ .../main/resources/META-INF/persistence.xml | 27 ++++++++ 6 files changed, 171 insertions(+), 8 deletions(-) create mode 100644 ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/Readme.md create mode 100644 ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/SearchByIcao.java diff --git a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/META-INF/maven/archetype-metadata.xml b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/META-INF/maven/archetype-metadata.xml index ff2b99160..97f0e0d1c 100644 --- a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -22,9 +22,10 @@ </includes> </fileSet> <fileSet encoding="UTF-8"> - <directory></directory> + <directory/> <includes> <include>.gitignore</include> + <include>Readme.md</include> </includes> </fileSet> </fileSets> diff --git a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/Readme.md b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/Readme.md new file mode 100644 index 000000000..1341328e0 --- /dev/null +++ b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/Readme.md @@ -0,0 +1,15 @@ +JPA 2 project template +====================== + +General: +-------- +Executing »`mvn test`« generates metamodel classes being required for +criteria based queries. + + +Eclipse users: +-------------- +You will have to execute »`mvn test`« manually from the command line or by right +clicking on your project's root choosing »`Run As`« - - > »`Maven test`«. This will +trigger the metamodel generating process resolving a compile time error in +class »`SearchByIcao`«. \ No newline at end of file diff --git a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/pom.xml b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/pom.xml index 0bde95906..69892d78f 100644 --- a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/pom.xml +++ b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/pom.xml @@ -19,8 +19,8 @@ <dependency> <groupId>org.hibernate</groupId> - <artifactId>hibernate-entitymanager</artifactId> - <version>5.1.0.Final</version> + <artifactId>hibernate-core</artifactId> + <version>5.2.5.Final</version> </dependency> <dependency> @@ -39,11 +39,11 @@ <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> - <version>2.6</version> + <version>2.7</version> </dependency> - <!-- Required for executable jar generation to avoid ClassNotFoundException: com.fasterxml.jackson.core.type.TypeReference - and similar dependency problems. --> + <!-- Required for executable jar generation to avoid ClassNotFoundException: + com.fasterxml.jackson.core.type.TypeReference and similar dependency problems. --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> @@ -58,17 +58,68 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.5.1</version> + <version>3.6.0</version> <configuration> <source>1.8</source> <target>1.8</target> + <compilerArgument>-proc:none</compilerArgument> </configuration> </plugin> + <plugin> + <groupId>org.bsc.maven</groupId> + <artifactId>maven-processor-plugin</artifactId> + <version>3.2.0</version> + + <executions> + <execution> + <id>process</id> + <goals> + <goal>process</goal> + </goals> + <phase>generate-sources</phase> + <configuration> + <outputDirectory>${project.build.directory}/metamodel</outputDirectory> + <processors> + <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> + </processors> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-jpamodelgen</artifactId> + <version>5.2.5.Final</version> + </dependency> + </dependencies> + </plugin> + + <!-- Build helper plugin to add generated sources to classpath --> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>1.12</version> + <executions> + <execution> + <id>add-source</id> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${project.build.directory}/metamodel</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> - <version>2.10.3</version> + <version>2.10.4</version> <configuration /> </plugin> diff --git a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/SearchByIcao.java b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/SearchByIcao.java new file mode 100644 index 000000000..08f4de4e9 --- /dev/null +++ b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/SearchByIcao.java @@ -0,0 +1,65 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package ${package}; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +import ${package}.model.Airline; +import ${package}.model.Airline_; + +public class SearchByIcao { + static final Logger log = LogManager.getLogger(SearchByIcao.class); + + // This refers to a corresponding entry <persistence-unit name="entitytemplatePU_nocreate"> + // in META-INF/persistence.xml + static public final String PERSISTENCE_UNIT_NAME = "entitytemplatePU_nocreate"; + /** + * @param args Unused + */ + public static void main( String[] args ) { + + + final EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); + final EntityManager em = factory.createEntityManager(); + final CriteriaBuilder builder = factory.getCriteriaBuilder(); + + log.info("Read airlines by icao code"); + em.getTransaction().begin(); + + + final CriteriaQuery<Airline> criteria = builder.createQuery( Airline.class ); + final Root<Airline> airlineRoot = criteria.from( Airline.class ); + criteria.select( airlineRoot ); + + // The subsequent line of code requires "mvn test" or equivalent triggering the metamodel generator + // when working in Eclipse. You may want to right click on your project root choosing + // + // "Run As" --> "Maven test". + // + // This step is being required whenever changes to your model classes in mi.intro.jpastart.model happen. + + criteria.where(builder.equal( airlineRoot.get( Airline_.icaoCode), "DLH" )); + final List<Airline> airlines = em.createQuery( criteria ).getResultList(); + for ( Airline person : airlines ) { + System.out.println(person); + } + em.getTransaction().commit(); + log.info("Read completed"); + + em.close(); + + factory.close(); + } +} \ No newline at end of file diff --git a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/model/Airline.java b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/model/Airline.java index c2ea4e5f5..1c51dcaa4 100644 --- a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/model/Airline.java +++ b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/java/model/Airline.java @@ -30,4 +30,8 @@ public class Airline { public String getIcaoCode() { return icaoCode; } + @Override + public String toString() { + return name + " (" + icaoCode + ")"; + } } diff --git a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml index 045f5015d..73e85f068 100644 --- a/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml +++ b/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml @@ -67,4 +67,31 @@ </properties> </persistence-unit> + <!-- The subsequent persistence unit won't modify the database's schema + javax.persistence.schema-generation.database.action=none + --> + <persistence-unit name="entitytemplatePU_nocreate"> + + <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.schema-generation.database.action" + value="none"/> + + <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.archive.autodetection" value="class"/> + + </properties> + </persistence-unit> + </persistence> -- GitLab