@Entity
class Institucion {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="`sectorId`")
private Sector sector;
}
setara dengan:
@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;
}
Catatan @ManyToOne(optional = true)
dan @JoinColumn(nullable = true)
. Ini menandakan ORM bahwa sector
atribut Institucion
bersifat opsional dan tidak boleh disetel (ke nilai bukan nol) sepanjang waktu.
Sekarang perhatikan repositori berikut:
public interface InstitucionRepository extends CrudRepository<Institucion, Long> {
List<Institucion> findAllByInstitucionNombre(String nombre);
List<Institucion> findAllByInstitucionEmail(String email);
}
Mengingat deklarasi entitas di atas, metode repositori harus menghasilkan kueri seperti:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionNombre=:param0
dan
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionEmail=:param0
Ini karena model entitas menunjukkan sector
menjadi opsional sehingga ORM perlu memuat Institucion
s tanpa mengkhawatirkan sector
mereka s.
Mengikuti pola ini, metode repositori berikut:
List<Institucion> findAllBySector(Sector sector);
diterjemahkan menjadi:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias1=:param0
Jika Institucion.sector
bukan opsional, buat juga wajib di model:
@ManyToOne(fetch=FetchType.LAZY, optional = false)
@JoinColumn(name="`sectorId`", nullable = false)
private Sector sector;
Jika Institucion.sector
memang opsional, hanya kueri manual seperti yang ditunjukkan pada jawaban @MaciejKowalski yang akan berfungsi.
Kueri berikut juga akan berfungsi:
List<Institucion> findAllBySectorSectorId(Long id);
Ini mengasumsikan bahwa nama atribut model persis seperti yang ditunjukkan dalam postingan.