@Entity
class Institucion {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="`sectorId`")
private Sector sector;
}
equivale a:
@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;
}
Nota @ManyToOne(optional = true)
e @JoinColumn(nullable = true)
. Questo significa per l'ORM che il sector
attributo di Institucion
è facoltativo e non può essere impostato (su un valore non nullo) tutto il tempo.
Ora considera il seguente repository:
public interface InstitucionRepository extends CrudRepository<Institucion, Long> {
List<Institucion> findAllByInstitucionNombre(String nombre);
List<Institucion> findAllByInstitucionEmail(String email);
}
Data la dichiarazione di entità sopra, i metodi del repository dovrebbero produrre query come:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionNombre=:param0
e
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionEmail=:param0
Questo perché il modello di entità indica sector
essere facoltativo, quindi l'ORM deve caricare Institucion
s senza preoccuparsi del loro sector
s.
Seguendo questo schema, il seguente metodo di repository:
List<Institucion> findAllBySector(Sector sector);
si traduce in:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias1=:param0
Se Institucion.sector
non è opzionale, rendilo obbligatorio anche nel modello:
@ManyToOne(fetch=FetchType.LAZY, optional = false)
@JoinColumn(name="`sectorId`", nullable = false)
private Sector sector;
Se Institucion.sector
è effettivamente facoltativo, funzionerà solo una query manuale come quella mostrata nella risposta di @MaciejKowalski.
Funzionerà anche la seguente query:
List<Institucion> findAllBySectorSectorId(Long id);
Ciò presuppone che i nomi degli attributi del modello siano esattamente come mostrati nel post.