diff --git a/persistence-jpa/pom.xml b/persistence-jpa/pom.xml index 66f0264f2c..a69ff72569 100644 --- a/persistence-jpa/pom.xml +++ b/persistence-jpa/pom.xml @@ -62,6 +62,21 @@ ${oracle.version} + + + org.postgresql + postgresql + 9.4.1208 + + + + + + mysql + mysql-connector-java + 5.1.38 + + diff --git a/persistence-jpa/src/main/java/com/baeldung/jpa/model/Car.java b/persistence-jpa/src/main/java/com/baeldung/jpa/model/Car.java index d57cff200e..5fefb49660 100644 --- a/persistence-jpa/src/main/java/com/baeldung/jpa/model/Car.java +++ b/persistence-jpa/src/main/java/com/baeldung/jpa/model/Car.java @@ -9,10 +9,10 @@ import javax.persistence.*; @Entity @Table(name = "CAR") @NamedStoredProcedureQueries({ - @NamedStoredProcedureQuery(name = "findByModelProcedure", procedureName = "FIND_CAR_BY_MODEL", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "p_model", type = String.class, mode = ParameterMode.IN), - @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR) }), - @NamedStoredProcedureQuery(name = "findByYearProcedure", procedureName = "FIND_CAR_BY_YEAR", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "p_year", type = Integer.class, mode = ParameterMode.IN), - @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR) }) }) + @NamedStoredProcedureQuery(name = "findByModelProcedure", procedureName = "FIND_CAR_BY_MODEL", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR), + @StoredProcedureParameter(name = "p_model", type = String.class, mode = ParameterMode.IN) }), + @NamedStoredProcedureQuery(name = "findByYearProcedure", procedureName = "FIND_CAR_BY_YEAR", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR), + @StoredProcedureParameter(name = "p_year", type = Integer.class, mode = ParameterMode.IN) }) }) public class Car { private long id; @@ -30,6 +30,7 @@ public class Car { @Id @SequenceGenerator(name = "CarIdSequence", sequenceName = "SEQ_CAR_ID", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CarIdSequence") + //@GeneratedValue(strategy = GenerationType.IDENTITY) -- for MySQL @Column(name = "ID", unique = true, nullable = false, scale = 0) public long getId() { return id; diff --git a/persistence-jpa/src/main/resources/META-INF/persistence.xml b/persistence-jpa/src/main/resources/META-INF/persistence.xml index e862311620..3cb81fc9c1 100644 --- a/persistence-jpa/src/main/resources/META-INF/persistence.xml +++ b/persistence-jpa/src/main/resources/META-INF/persistence.xml @@ -16,5 +16,15 @@ + + + \ No newline at end of file diff --git a/persistence-jpa/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql b/persistence-jpa/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql new file mode 100644 index 0000000000..0ef84fb7eb --- /dev/null +++ b/persistence-jpa/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql @@ -0,0 +1,8 @@ +DELIMITER $$ +CREATE DEFINER=`root`@`localhost` PROCEDURE `FIND_CAR_BY_YEAR`(in p_year int) +begin +SELECT ID, MODEL, YEAR + FROM CAR + WHERE YEAR = p_year; +end$$ +DELIMITER ; diff --git a/persistence-jpa/src/main/resources/config/database/FIND_CAR_BY_YEAR_PROCEDURE.sql b/persistence-jpa/src/main/resources/config/database/FindCarByYearProcedureOracle.sql similarity index 100% rename from persistence-jpa/src/main/resources/config/database/FIND_CAR_BY_YEAR_PROCEDURE.sql rename to persistence-jpa/src/main/resources/config/database/FindCarByYearProcedureOracle.sql diff --git a/persistence-jpa/src/main/resources/config/database/create_table_mysql.sql b/persistence-jpa/src/main/resources/config/database/create_table_mysql.sql new file mode 100644 index 0000000000..4a4feebdea --- /dev/null +++ b/persistence-jpa/src/main/resources/config/database/create_table_mysql.sql @@ -0,0 +1,6 @@ +CREATE TABLE `car` ( + `ID` int(10) NOT NULL AUTO_INCREMENT, + `MODEL` varchar(50) NOT NULL, + `YEAR` int(4) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/persistence-jpa/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java b/persistence-jpa/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java index e6880c4d76..67f8eb4304 100644 --- a/persistence-jpa/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java +++ b/persistence-jpa/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java @@ -28,7 +28,7 @@ public class StoredProcedureTest { EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); - Car car = new Car("Ford Mustang", 2015); + Car car = new Car("Fiat Punto", 2015); entityManager.persist(car); transaction.commit(); } catch (Exception e) { @@ -55,14 +55,23 @@ public class StoredProcedureTest { @Test public void findCarsByYearNoNamedStored() { - StoredProcedureQuery findByYearProcedure = + StoredProcedureQuery findByYearProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR", Car.class) - .registerStoredProcedureParameter("p_year", Integer.class, ParameterMode.IN) - .registerStoredProcedureParameter("data", Void.class, ParameterMode.REF_CURSOR).setParameter("p_year", 2015); + .registerStoredProcedureParameter("data", Void.class, ParameterMode.REF_CURSOR) + .registerStoredProcedureParameter("p_year", Integer.class, ParameterMode.IN) + .setParameter("p_year", 2015); findByYearProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); } + @Test @Ignore + public void findCarsByYearMySql() { + StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR",Car.class) + .registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN) + .setParameter(1, 2015); + storedProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); + } + @AfterClass public static void destroy() { diff --git a/persistence-jpa/src/test/resources/persistence.xml b/persistence-jpa/src/test/resources/persistence.xml index fc6c7273b2..d118a264d3 100644 --- a/persistence-jpa/src/test/resources/persistence.xml +++ b/persistence-jpa/src/test/resources/persistence.xml @@ -16,6 +16,16 @@ + + +