Skip to content

Conversation

@rashidi
Copy link
Owner

@rashidi rashidi commented Jul 19, 2025

No description provided.

@rashidi rashidi added the enhancement New feature or request label Jul 19, 2025
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @rashidi, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a new example project focused on demonstrating how to implement and configure Hibernate's second-level caching within a Spring Data JPA application. The primary goal is to provide a clear, runnable example that illustrates how entity data can be cached to reduce database load and improve application performance, particularly for frequently accessed, less volatile data.

Highlights

  • New Example Module: Added a new Spring Boot module data-jpa-hibernate-cache to demonstrate Hibernate's second-level caching capabilities.
  • Hibernate Caching Configuration: Configured Hibernate to use JCache with Ehcache as the caching provider through application.properties and a dedicated ehcache.xml file.
  • Entity Caching: The Customer entity has been annotated with @Cache(usage = READ_WRITE, region = "customer") to enable second-level caching for customer data, optimizing subsequent retrievals.
  • Caching Verification Test: Included a new test case (CustomerRepositoryTests) that verifies the Customer entity is correctly stored in the Hibernate second-level cache after its initial retrieval, using EntityManagerFactory.getCache().contains().
  • Testcontainers Integration: Set up Testcontainers for PostgreSQL in the test environment, providing a clean and isolated database instance for reliable testing of the caching mechanism.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a well-structured example for demonstrating Hibernate's second-level caching with Ehcache and Testcontainers. The overall implementation is solid. I've provided a few suggestions to enhance it further, focusing on using up-to-date configuration properties, improving the entity design for robustness, making tests more stable and comprehensive, and adhering to common file formatting conventions.

Comment on lines 3 to 4
spring.jpa.properties.hibernate.javax.cache.uri=/ehcache.xml
spring.jpa.properties.hibernate.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

With Spring Boot 3 and Hibernate 6, the JCache configuration properties have been updated to move away from the javax.* namespace. While the old properties might be supported for backward compatibility, it is best practice to use the current hibernate.cache.jcache.* properties to ensure future compatibility.

spring.jpa.properties.hibernate.cache.jcache.uri=/ehcache.xml
spring.jpa.properties.hibernate.cache.jcache.provider=org.ehcache.jsr107.EhcacheCachingProvider

*/
@Entity
@Cache(usage = READ_WRITE, region = "customer")
class Customer {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For a JPA entity, it's highly recommended to include:

  • Getters and setters for its properties.
  • A proper implementation of equals() and hashCode(), typically based on the business key or primary key.

While JPA can work with field access, providing these methods improves maintainability, testability, and helps avoid potential issues with detached entities and their behavior in collections.

@sonarqubecloud
Copy link

@rashidi rashidi merged commit 51e3c1c into master Jul 19, 2025
8 checks passed
@rashidi rashidi deleted the data-jpa-hibernate-cache branch July 19, 2025 14:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants