@Entity
class Institucion {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="`sectorId`")
private Sector sector;
}
is gelijk aan:
@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;
}
Opmerking @ManyToOne(optional = true)
en @JoinColumn(nullable = true)
. Dit betekent voor de ORM dat de sector
attribuut van Institucion
is optioneel en kan niet altijd worden ingesteld (op een niet-null-waarde).
Overweeg nu de volgende opslagplaats:
public interface InstitucionRepository extends CrudRepository<Institucion, Long> {
List<Institucion> findAllByInstitucionNombre(String nombre);
List<Institucion> findAllByInstitucionEmail(String email);
}
Gezien de entiteitsverklaring hierboven, zouden de repository-methoden query's moeten produceren zoals:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionNombre=:param0
en
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionEmail=:param0
Dit komt omdat het entiteitsmodel sector
aangeeft om optioneel te zijn, dus de ORM moet Institucion
load laden s zonder je zorgen te maken over hun sector
v.
Volgens dit patroon, de volgende repository-methode:
List<Institucion> findAllBySector(Sector sector);
vertaalt naar:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias1=:param0
Als Institucion.sector
is niet optioneel, maak het ook verplicht in het model:
@ManyToOne(fetch=FetchType.LAZY, optional = false)
@JoinColumn(name="`sectorId`", nullable = false)
private Sector sector;
Als Institucion.sector
is inderdaad optioneel, alleen een handmatige zoekopdracht zoals die in het antwoord van @MaciejKowalski wordt weergegeven, zal werken.
De volgende zoekopdracht werkt ook:
List<Institucion> findAllBySectorSectorId(Long id);
Dit veronderstelt dat de namen van de modelattributen precies zijn zoals weergegeven in de post.