Lorsque vous exprimez une relation avec Hibernate, ajoutez une annotation telle que @OneToMany ci-dessous.
User.java
@Getter
@Setter
@NoArgsConstructor
@Entity
public class User {
public User(Long id, String name, Integer age, Set<Post> posts){
this.id = id;
this.name = name;
this.age = age;
this.posts = posts;
}
private Long id;
private String name;
private Integer age;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user" )
private Set<Post> posts = new HashSet<>();
}
Les messages sont annotés avec @OneToMany. Vous pouvez spécifier FetchType.EAGER ou FetchType.LAZY dans la récupération de cet argument. Au fait, s'il n'est pas spécifié, il sera LAZY par défaut. Alors, quelle est la différence entre les deux?
Dans le cas de LAZY, les publications ne seront pas chargées lorsque l'instance User est appelée par Hibernate. En d'autres termes, user.getPosts () sera Null. D'autre part, dans le cas d'EAGER, l'objet avec la relation est également lu lorsque l'instance est appelée, donc user.getPosts () n'est pas nul.
LAZY: Vous devez faire attention à Null, mais vous pouvez utiliser la mémoire efficacement. EAGER: Pas nul, mais charge lourde.
La valeur LAZY par défaut est recommandée pour Spring Boot. Dans l'exemple précédent, il est possible que les messages ne soient affichés que lorsque l'utilisateur se connecte, il semble donc préférable de préparer une classe de référentiel distincte et de spécifier les conditions de lecture.
LAZY est fondamentalement recommandé, mais il est parfois utile d'utiliser EAGER pour éviter les erreurs NullPointerExceptions.
https://howtoprogramwithjava.com/hibernate-eager-vs-lazy-fetch-type/
Recommended Posts