@Entity
class Institucion {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="`sectorId`")
private Sector sector;
}
motsvarar:
@Entity
class Institucion {
@ManyToOne(cascade = {}
, fetch=FetchType.LAZY
, optional = true
, targetEntity = void.class)
@JoinColumn(columnDefinition = ""
, foreignKey = @ForeignKey
, insertable = true
, name="`sectorId`"
, nullable = true
, referencedColumnName = ""
, table = ""
, unique = false
, updatable = false)
private Sector sector;
}
Notera @ManyToOne(optional = true)
och @JoinColumn(nullable = true)
. Detta betyder för ORM att sector
attribut för Institucion
är valfritt och kanske inte ställs in (till ett icke-nullvärde) hela tiden.
Tänk nu på följande arkiv:
public interface InstitucionRepository extends CrudRepository<Institucion, Long> {
List<Institucion> findAllByInstitucionNombre(String nombre);
List<Institucion> findAllByInstitucionEmail(String email);
}
Med tanke på enhetsdeklarationen ovan bör lagringsmetoderna producera frågor som:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionNombre=:param0
och
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionEmail=:param0
Detta beror på att enhetsmodellen indikerar sector
att vara valfritt så ORM måste ladda Institucion
utan att oroa sig för deras sector
s.
Följande lagringsmetod följer detta mönster:
List<Institucion> findAllBySector(Sector sector);
översätts till:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias1=:param0
Om Institucion.sector
är inte valfritt, gör det obligatoriskt i modellen också:
@ManyToOne(fetch=FetchType.LAZY, optional = false)
@JoinColumn(name="`sectorId`", nullable = false)
private Sector sector;
Om Institucion.sector
är verkligen valfritt, bara en manuell fråga som den som visas i @MaciejKowalskis svar kommer att fungera.
Följande fråga kommer också att fungera:
List<Institucion> findAllBySectorSectorId(Long id);
Detta förutsätter att modellattributnamnen är exakt som visas i inlägget.