Code: Select all
@RepositoryDefinition(domainClass = User.class, idClass = Long.class)
public interface UserRepository {
Optional findById(Long id);
@EntityGraph(attributePaths = {"emailData"}, type = EntityGraph.EntityGraphType.LOAD) // this is important
Optional findEagerlyById(Long id);
}
< /code>
// I removed some irrelevant fields
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
import java.util.List;
@Entity
@Getter
@Setter
@Table(name = "\"user\"")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Account account;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List emailData;
}
Code: Select all
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
@Entity
@Getter
@Setter
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
private BigDecimal balance;
}
Code: Select all
Hibernate: select u1_0.id,a1_0.id,a1_0.balance,u1_0.date_of_birth,u1_0.name,u1_0.password from "user" u1_0 left join account a1_0 on u1_0.id=a1_0.user_id where u1_0.id=?
Hibernate: select ed1_0.user_id,ed1_0.id,ed1_0.email from email_data ed1_0 where ed1_0.user_id=?
< /code>
Was ist es geworden (findEagerlyById(String)
Code: Select all
Hibernate: select u1_0.id,u1_0.date_of_birth,ed1_0.user_id,ed1_0.id,ed1_0.email,u1_0.name,u1_0.password from "user" u1_0 left join email_data ed1_0 on u1_0.id=ed1_0.user_id where u1_0.id=?
Hibernate: select a1_0.id,a1_0.balance,u1_0.id,u1_0.date_of_birth,u1_0.name,u1_0.password from account a1_0 left join "user" u1_0 on u1_0.id=a1_0.user_id where a1_0.user_id=?
Code: Select all
/**
* When the jakarta.persistence.loadgraph property is used to specify an entity graph, attributes that are specified
* by attribute nodes of the entity graph are treated as FetchType.EAGER and attributes that are not specified are
* treated according to their specified or default FetchType.
*
* @see [url=https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1#load-graph-semantics]Jakarta
* Persistence Specification: Load Graph Semantics[/url]
*/
LOAD("jakarta.persistence.loadgraph"),
Code: Select all
// jakarta.persistence.OneToOne
FetchType fetch() default FetchType.EAGER;