# JPA & Hibernate — Advanced Java

Source: https://www.geekswithgeeks.com/en/advanced-java/adv-jpa-hibernate

> Map Java objects to database tables with JPA entities and Hibernate, understand the persistence context, and spot and fix the N+1 select problem.

## Entities & the persistence context

`@Entity` classes map to tables; the `EntityManager`'s persistence context tracks loaded entities and flushes changes automatically inside a transaction. JPA is the spec, Hibernate the common implementation.

```java
@Entity
class Book {
    @Id @GeneratedValue Long id;
    String title;
    @ManyToOne Author author;
}

interface BookRepository extends JpaRepository<Book, Long> {
    List<Book> findByAuthorName(String name);
}
```

## The N+1 select problem

Lazily loading a collection for each of N parent rows fires N extra queries. Fix with a `JOIN FETCH` query, an entity graph, or batch fetching. Always check the SQL your ORM actually emits.
