Имея следующие определения родительско-дочерних сущностей, при использовании Spring @EntityGraph
выполняет LEFT OUTER JOIN
вместо INNER JOIN
.
@Entity
public class Parent {
@Id
@Column(name = "gid", updatable = false, nullable = false, columnDefinition = "...")
private UUID id = UUID.randomUUID();
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "type_id", nullable = false, columDefinition='...')
private Type type;
// ...
@Entity
public class Type {
@Id
@Column(name = "gid", updatable = false, nullable = false, columnDefinition = "...")
private UUID id = UUID.randomUUID();
// ...
public interface ParentRepository extends JpaRepository<Parent, UUID> {
@EntityGraph(attributePaths = "type")
Optional<Parent> findOneWithTypeById(UUID id);
Результат ParentRepository#findOneWithTypeById
a LEFT JOIN
, хотя я указал, что type
это optional=false
и nullable=false
.
Здесь должно быть достаточно информации для Spring / JPA, чтобы сгенерировать запрос с INNER JOIN?