In this post, I’d like you to meet Rafael Ponte, a software developer, blogger, conference speaker, and Java Persistence aficionado.
Hi, Rafael. Would you like to introduce yourself and tell us a little bit about your developer experience?
First of all, thank you very much for inviting me! My name is Rafael Ponte (@rponte on Twitter), a 33-year-old software developer, instructor, and co-founder at TriadWorks, currently living in Ceará, in the Northeast region of Brazil.
I’ve been working with software development since 2005, and most of my experience is developing and integrating enterprise systems with Java and relational databases. Although I’ve worked with other languages and technologies, I must be honest: I’m a Java enthusiast. That’s why during all this time I’ve been working with many Java technologies and frameworks and, I’ve tried to learn how to make the most of them.
For the last 4 years, I’ve been working in education with my own company, TriadWorks, where we’ve been training hundreds of developers and students on how to develop better software with the most popular Java technologies and approaches, like JPA with Hibernate, Spring, VRaptor, JSF with PrimeFaces and CDI, TDD and automated tests with JUnit, database migrations, continuous integration (CI) and so on.
So, most of my career has been helping developers, teams, and companies to build long-term software through consultancy and training.
You’ve written many articles about JPA and Hibernate on your blog. What motivates you to write on this particular topic?
Since my early days as a junior developer, I felt I could help other developers learn better and more easily what I had a hard time learning. So I started helping them by answering their questions in many discussion lists/forums, giving presentations in popular events in Brazil, and writing articles on my personal blog and the one of the company.
In Brazil, most of enterprise systems use JPA and Hibernate as persistence framework. While doing consultancy, I’ve realized many teams and developers were struggling with the framework just because they didn’t understand how to use it in scenarios different than CRUDs or, in some cases, they didn’t have a solid background about the challenges of persistence they could find and how to get the best out of the Hibernate.
So, writing articles in my blog about Hibernate and those common issues is my contribution to help other developers to overcome many of these challenges.
You are also speaking at conferences throughout Brazil. Do you think that JPA and Hibernate presentations are in good demand, even 16 years after Hibernate was first released, and 11 years since we’ve been having JPA?
As I said, in Brazil most of the companies have been choosing Hibernate as the first option when persistence is the focus. But unfortunately, most of the teams don’t have a senior developer with good experience in JPA and Hibernate, so usually, they end up facing the most common problems when building the software.
You know, problems like:
queries fetching more data than needed,
out of memory issues in batch process tasks,
incorrect configuration of connection pool, etc.
Therefore, one way to help them is talking about those problems and how to avoid them through presentations, articles, and books.
In fact, your book, High-Performance Java Persistence, certainly is one of the best ones to get started.
What are the main causes of permanence related issues when using JPA and Hibernate and what should developers do to overcome these problems?
In enterprise systems, what I’ve noted is that most of the bottlenecks come from persistence layer, so in my opinion, the main cause is related to developers not knowing the basics about persistence and how a relational database works.
The lack of this knowledge usually causes several problems when using any kind of persistence framework. So, it doesn’t matter what framework you’re using if you don’t understand the problem you have to solve.
For example, in applications that use JPA and Hibernate, lots of them still:
don’t use a connection pool,
queries are written without any concerned about N+1 Select,
queries are fetching too much data but using only a small part of them,
wrong mapping and fetch type configuration,
manual or poor transaction management,
bad implementation of batch processing, and so on.
What can developers do?
Well, first off, they must understand the problem they’re dealing with, then, after that, they can find solutions inside of the persistence framework they use. In case their current framework doesn’t solve it efficiently, they could try other options, like jOOQ framework for example.
We always value feedback from our users, so can you tell us what you’d like us to improve or are there features that we should add support for?
Wow, that’s a really good question!
Two years ago, I would say the documentation could be a little bit better, but you, Vlad, have been doing a great job improving it over the last years. Indeed, Hibernate team has done a great job since the beginning so I can’t think of a place which deserves an improvement right now.
In my opinion, Hibernate is a complete framework in every way. That’s why it’s the first option in the enterprise world.
Thank you, Rafael, for taking your time. It is a great honor to have you here. To reach Rafael, you can follow him on Twitter.