- Published on
ORM: Lazy Loading vs. Eager Loading
- Authors
- Name
- Gary Huynh
- @huynhthienthach
Alright, dear code magicians, let's now dive into another juicy topic in the realm of Object-Relational Mapping (ORM)
. Have you ever had a dinner party and you had two types of guests: those who dive headfirst into the buffet (eager folks
), and those who take their sweet time, only grabbing a nibble here and there (the lazy
ones)? Well, this is kind of what we are going to talk about, but in terms of data loading strategies
in ORM
: eager loading
vs. lazy loading
.
Eager Loading: Just like those guests who attack the buffet, eager loading doesn't waste any time. When you load an entity
, eager loading also loads all related entities immediately
. For instance, if you have an Author
entity and a Book
entity, eager loading will fetch the author and all of their books from the database
in a single go. This can be beneficial when you know you're going to need all that data. But if you don't? Well, you could be unnecessarily overloading
your application and database
.
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(fetch = FetchType.EAGER)
private List<Book> books;
//getters and setters...
}
In this example, every time we fetch an Author
, all their Books
are fetched too, whether we need them or not.
Lazy Loading: Then we have the "lazy" guests. These are the ones that only load what they need
, when they need it. By default, most ORMs
(including Hibernate
) will use lazy loading. In our Author
/Book
example, if we load an Author
, their Books
aren't loaded until we explicitly ask for them. This can save memory
and improve performance
by not loading unnecessary data, but it can also result in additional database calls when the data is needed.
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY)
private List<Book> books;
//getters and setters...
}
In this case, the Books
of an Author
are loaded only when we call author.getBooks()
.
So, when it comes to data loading strategies
, it's all about balance. Too eager, and you might overconsume resources. Too lazy, and you might find yourself having to make multiple trips back to the database (or the buffet). As always, the choice depends on your specific use case and data needs.
Well, that's all for now, folks! Remember to stay hungry for knowledge but be smart about your resource consumption! Happy coding!