Call Stored Procedure using Hibernate + Jakarta

By Arvind Rai, February 06, 2023
On this page, we will learn to call stored procedure using Hibernate and Jakarta. Oracle transferred Java EE fully to Eclipse Foundation that is an open source foundation. Later Java Persistence API (JPA) was renamed to Jakarta Persistence API (JPA).
Using Jakarta Persistence API, we have following changes in Hibernate.
1. The EntityManagerFactory is the Jakarta Persistence equivalent of a SessionFactory.
2. In Jakarta Persistence nomenclature, the Session is represented by an EntityManager.
3. The EntityTransaction is the Jakarta Persistence equivalent of a Transaction.

Example: Call Stored Procedure

1. Technologies Used
1. Java 19
2. Hibernate 6
3. Jakarta Persistence API 3
4. MySQL 5.5
2. MySQL Database
CREATE TABLE `articles` (
	`article_id` INT(5) NOT NULL AUTO_INCREMENT,
	`title` VARCHAR(200) NOT NULL,
	`category` VARCHAR(100) NOT NULL,
	PRIMARY KEY (`article_id`)
)

CREATE PROCEDURE read_article ( 
  IN in_id INTEGER, 
  OUT out_title VARCHAR(100), 
  OUT out_category VARCHAR(100)
)
BEGIN 
  SELECT title, category
  INTO out_title, out_category
  FROM articles WHERE article_id = in_id;
END; 
3. pom.xml
<dependencies>
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>6.1.6.Final</version>
	</dependency>
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-entitymanager</artifactId>
		<version>6.0.0.Alpha7</version>
	</dependency>		
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.32</version>
	</dependency>
</dependencies> 
4. persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence
          https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
	version="3.0">
	<persistence-unit name="com.concretepage">
		<description>Procedure Demo</description>
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<properties>
			<property name="hibernate.dialect"
				value="org.hibernate.dialect.MySQLDialect" />
			<property name="jakarta.persistence.jdbc.driver"
				value="com.mysql.cj.jdbc.Driver" />
			<property name="jakarta.persistence.jdbc.url"
				value="jdbc:mysql://localhost/concretepage" />
			<property name="jakarta.persistence.jdbc.user" value="root" />
			<property name="jakarta.persistence.jdbc.password"
				value="cp" />
		</properties>
	</persistence-unit>
</persistence> 
5. Java Code
HibernateUtil.java
package com.concretepage.util;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;

public class HibernateUtil {
 	private static final EntityManagerFactory emFactory;
	static {
		   emFactory = Persistence.createEntityManagerFactory("com.concretepage");
	}
	public static EntityManager getEntityManager(){
		return emFactory.createEntityManager();
	}
}
RunProcedure.java
package com.concretepage;
import com.concretepage.util.HibernateUtil;
import jakarta.persistence.EntityManager;
import jakarta.persistence.ParameterMode;
import jakarta.persistence.StoredProcedureQuery;

public class RunProcedure {
  public static void main(String[] args) {
	EntityManager entityManager = HibernateUtil.getEntityManager();
	StoredProcedureQuery query = entityManager.createStoredProcedureQuery("read_article");
	query.registerStoredProcedureParameter("in_id", Integer.class, ParameterMode.IN);
	query.registerStoredProcedureParameter("out_title", String.class, ParameterMode.OUT);
	query.registerStoredProcedureParameter("out_category", String.class, ParameterMode.OUT);

	query.setParameter("in_id", 1);
	query.execute();
	String title = (String) query.getOutputParameterValue("out_title");
	String cat = (String) query.getOutputParameterValue("out_category");
	System.out.println(title);
	System.out.println(cat);
  }
}
Article.java
package com.concretepage.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity()
@Table(name="articles")
public class Article { 
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="article_id")  
        private int articleId;
	@Column(name="title")
        private String title;
	@Column(name="category")
	private String category;
	
	public int getArticleId() {
	  return articleId;
	}
	public void setArticleId(int articleId) {
	  this.articleId = articleId;
	}
	public String getTitle() {
	  return title;
	}
	public void setTitle(String title) {
	  this.title = title;
	}
	public String getCategory() {
	  return category;
	}
	public void setCategory(String category) {
	  this.category = category;
	}
} 

Reference

Hibernate ORM User Guide
POSTED BY
ARVIND RAI
ARVIND RAI







©2024 concretepage.com | Privacy Policy | Contact Us