Transactions are a cornerstone when building database applications. However in our daily work, we often do not really care much about them. In many cases they are handled implicitly for us. We rely on frameworks to do a lot of the heaving lifting for us. At a pure JPA level there is a lot of transaction-related logic going on under the hood. This post discusses transactions at the JPA and database (JDBC) layer and how they play together and affect the functionality and performance of our applications.