@OneToOne
Association particulière utilisée pour une relation réflexive par exemple table employe <-> employeur
Par exemple, le cas où on veut alléger une table qui pourrait avoir trop de données exemple movie <- movie_details

Lors du chargement de Movie, Hibernate doit savoir s’il doit initialiser MovieDetails à null OU avec un proxy : il charge pour cela MovieDetails
Dans notre exemple ici, on a mis en place une association uni-directionelle entre Movie et MovieDetails. Lors du chargement de Movie, Hibernate var charger automatiquement MovieDétails même si on définit le chargement fetch=FetchType.LAZY sur @OneToOne dans MovieDetails
package com.hibernate4all.tutorial.domain;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "movie_details")
public class MovieDetails {
// Cet id n'a pas de colonne dans la table et ne sera pas généré donc pas de @GeneratedValue
// Par contre il représente quand meme l'id de cette entity et il faut le renseigner voir @MapsId
// en le référançant par l'attribut movie (ligne 18)
@Id
private Long id;
@Column(length = 4000)
private String plot;
// @OneToOne est une relation particulière unidirectionnelle
// Quand on charge la relation Movie vers MovieDetails, et même si on charge cette relation en lazy, Hibernate charge automatiquement MovieDetails
// Quand on charge Movie
// En outre, lors du chargement de Movie, Hibernate doit savoir s'il doit initialiser MovieDetails à null ou avec un proxy : il charge pour cela MovieDetails
// @MapsId map une clé primaire et est utilisable sur une relation @ManyToOne ou @OneToOne
@OneToOne
@MapsId // Annotation permettant de renseigner la référence de clé primaire pour l'attribut id (L12)
private Movie movie;
public Long getId() {
return id;
}
public MovieDetails setId(Long id) {
this.id = id;
return this;
}
public String getPlot() {
return plot;
}
public MovieDetails setPlot(String plot) {
this.plot = plot;
return this;
}
public Movie getMovie() {
return movie;
}
public MovieDetails setMovie(Movie movie) {
this.movie = movie;
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MovieDetails)) return false;
MovieDetails other = (MovieDetails) o;
if(id == null && other.getId() == null) {
return Objects.equals(plot, other.getPlot());
}
return id != null && Objects.equals(id, other.getId());
}
@Override
public int hashCode() {
return Objects.hash(59); // pas de clé fonctionnelle donc hascode = numéro arbitraire
}
}
Langage du code : JavaScript (javascript)