-
Notifications
You must be signed in to change notification settings - Fork 2
Add example for Hibernate second level caching #254
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this 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-cacheto demonstrate Hibernate's second-level caching capabilities. - Hibernate Caching Configuration: Configured Hibernate to use JCache with Ehcache as the caching provider through
application.propertiesand a dedicatedehcache.xmlfile. - Entity Caching: The
Customerentity 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 theCustomerentity is correctly stored in the Hibernate second-level cache after its initial retrieval, usingEntityManagerFactory.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
-
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. ↩
There was a problem hiding this 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.
| spring.jpa.properties.hibernate.javax.cache.uri=/ehcache.xml | ||
| spring.jpa.properties.hibernate.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For a JPA entity, it's highly recommended to include:
- Getters and setters for its properties.
- A proper implementation of
equals()andhashCode(), 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.
...nate-cache/src/test/java/zin/rashidi/datajpa/hibernatecache/TestcontainersConfiguration.java
Show resolved
Hide resolved
...cache/src/test/java/zin/rashidi/datajpa/hibernatecache/customer/CustomerRepositoryTests.java
Outdated
Show resolved
Hide resolved
...cache/src/test/java/zin/rashidi/datajpa/hibernatecache/customer/CustomerRepositoryTests.java
Outdated
Show resolved
Hide resolved
|



No description provided.