Partner – Orkes – NPI EA (cat=Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag=Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Partner – LambdaTest – NPI EA (cat=Testing)
announcement - icon

Browser testing is essential if you have a website or web applications that users interact with. Manual testing can be very helpful to an extent, but given the multiple browsers available, not to mention versions and operating system, testing everything manually becomes time-consuming and repetitive.

To help automate this process, Selenium is a popular choice for developers, as an open-source tool with a large and active community. What's more, we can further scale our automation testing by running on theLambdaTest cloud-based testing platform.

Read more through our step-by-step tutorial on how to set up Selenium tests with Java and run them on LambdaTest:

>> Automated Browser Testing With Selenium

Partner – Orkes – NPI EA (cat=Java)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

1. Overview

Working with large datasets in relational databases can challenge query performance. While Hibernate provides optimizations for entity mapping, partitioning becomes essential as the dataset expands.

In this tutorial, we’re going to dive into how we can use Spring Boot to work with partitioned tables. We’ll be using Hibernate and Spring Data JPA to handle the interactions, but we’ll see that the actual partitioning is something we configure directly within the database itself, like PostgreSQL.

2. The Role of @PartitionKey

When we split a really big table into smaller, more manageable tables, it’s called partitioning. Each partition contains a subset of data, often determined by a partition key. In Hibernate, we can map a specific column as the partition key so that queries can target only the relevant partitions, drastically improving query speed.

Partitioning creates separate physical tables for each data segment. For example, Sales table partitioned by saleDate, we might have sales_2024_q1, sales_2024_q2, and so on. This physical separation is what enables the performance gains.

We cannot simply partition an existing, large table. The process requires a migration strategy. This usually involves creating a new partitioned table structure and then migrating the data from the old table into the new one. This ensures data integrity and consistency.

The full benefit of partitioning is achieved when our queries include the partition key in their WHERE clauses. If a query doesn’t specify the partition key, the database’s query planner will likely have to search all partitions, which negates the performance benefits.

3. Setting Up PostgreSQL Database

We’ll be using PostgreSQL as our DB. Let’s create the table with a PARTITION BY clause, which in PostgreSQL, we might define as:

CREATE TABLE sales (
    id BIGINT PRIMARY KEY,
    sale_date DATE NOT NULL,
    amount DECIMAL(10, 2)
) PARTITION BY RANGE (sale_date);

CREATE TABLE sales_2024_q1 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');

CREATE TABLE sales_2024_q2 PARTITION OF sales
FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

-- And so on for other partitions

4. Dependencies Required

We’d require spring-boot-starter-web to create our REST endpoints:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Our primary dependency would be spring-boot-starter-data-jpa for database interactions. It bundles Spring Data JPA and Hibernate, the default JPA provider.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

This is the JDBC (Java Database Connectivity) driver for PostgreSQL. The JDBC driver is a crucial software component that enables our Java application to connect to and interact with a PostgreSQL database:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

5. Setting Up a Spring Boot Project

Here’s a clear example of how to represent a partition key in a Spring Boot and Hibernate setup.

5.1. Database Entity Setup

First, let’s look at the entity. We’ll create a Sales entity and annotate the saleDate field with @PartitionKey to enable Hibernate’s optimizations:

@Entity
@Table(name = "sales")
public class Sales {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @PartitionKey
    private LocalDate saleDate;

    private BigDecimal amount;

    public Sales(Long id, LocalDate saleDate, BigDecimal amount) {
        this.id = id;
        this.saleDate = saleDate;
        this.amount = amount;
    }

    public Sales() {
    }
}

@PartitionKey is a custom annotation that signals Hibernate that this column will be the basis for table partitioning in the database. This annotation is only present in Hibernate 6.2 and later.

Next, we define our repository, which extends JpaRepository to leverage Spring Data JPA’s power for data access:

@Repository
public interface SalesRepository extends JpaRepository<Sales, Long> {
}

5.2. Design Controller to Test Partition

Now, let’s create a controller to interact with our Sales data. The testPartition() and getAllPartition() methods demonstrate saving a new Sales record. We need to consider that with a partitioned table, the database will automatically place this record into the correct partition based on the saleDate:

@RestController
public class Controller {

    @Autowired
    SalesRepository salesRepository;

    @GetMapping
    public ResponseEntity<List<Sales>> getAllPartition() {
        return ResponseEntity.ok()
          .body(salesRepository.findAll());
    }

    @GetMapping("add")
    public ResponseEntity testPartition() {
        return ResponseEntity.ok()
          .body(salesRepository.save(new Sales(104L, LocalDate.of(2025, 02, 01),
            BigDecimal.valueOf(Double.parseDouble("8476.34d")))));
    }
}

Finally, we’ve the application.properties file, where we configure our database connection. We also have to update the username and password as per the DB:

spring.application.name=partitionKeyDemo

# PostgreSQL connection properties
spring.datasource.url=jdbc:postgresql://localhost:5432/salesTest
spring.datasource.username=username
spring.datasource.password=password

5.3. Output

Now, when we run our application and hit http://localhost:8080/add , we can see the row going in the proper partition in PostgreSQL DB:

partitions hibernate                   

Here we can see two partitions created on the left pane. Then, we can run a query to fetch the row inserted in the correct partition automatically:

SELECT * FROM public.sales_2025_q1;

6. Optimizing Queries With Partitioning

To truly benefit from partitioning, we must design our queries carefully. Let’s consider a scenario where we want to find all sales for a specific date. A well-designed query would look something like this:

SELECT * FROM sales WHERE sale_date = '2025-02-01';

In this case, the database can use the partition key (sale_date) to immediately identify and search only the partition corresponding to ‘2025-02-01’, completely ignoring all other partitions. This is a highly efficient operation.
However, if we run a query that does not include the partition key, such as:

SELECT * FROM sales WHERE amount > 5000;

The database will be forced to scan every single partition to find the matching records. This type of query is known as a global scan, and it’ll likely perform much worse than a query on a non-partitioned, properly indexed table.

7. Conclusion

In this tutorial, we looked at how combining Hibernate’s entity mapping with database-level partitioning we can keep performance consistent as data grows. Partitioning is a powerful technique for scaling our relational databases to handle massive datasets.

While the implementation resides at the database level, Hibernate and Spring Boot provide the necessary tools to interact with these structures seamlessly. At the same time, it is necessary to build queries involving the partition column to use the benefits of the partitioned key.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.
Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

Partner – Orkes – NPI EA (cat = Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag = Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

eBook Jackson – NPI EA – 3 (cat = Jackson)