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 @@
+
+
+