@Entity
class Institucion {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="`sectorId`")
private Sector sector;
}
के बराबर है:
@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;
}
नोट @ManyToOne(optional = true)
और @JoinColumn(nullable = true)
. यह ORM को दर्शाता है कि sector
Institucion
. की विशेषता वैकल्पिक है और इसे हर समय (गैर-शून्य मान पर) सेट नहीं किया जा सकता है।
अब निम्नलिखित भंडार पर विचार करें:
public interface InstitucionRepository extends CrudRepository<Institucion, Long> {
List<Institucion> findAllByInstitucionNombre(String nombre);
List<Institucion> findAllByInstitucionEmail(String email);
}
ऊपर दी गई इकाई घोषणा को देखते हुए, रिपॉजिटरी के तरीकों को इस तरह के प्रश्न उत्पन्न करने चाहिए:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionNombre=:param0
और
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias0.institucionEmail=:param0
ऐसा इसलिए है क्योंकि इकाई मॉडल sector
indicates को इंगित करता है वैकल्पिक होने के लिए ओआरएम को Institucion
load लोड करने की आवश्यकता है s अपने sector
. के बारे में चिंता किए बिना स.
इस पैटर्न का अनुसरण करते हुए, निम्नलिखित रिपोजिटरी विधि:
List<Institucion> findAllBySector(Sector sector);
में अनुवाद करता है:
select
generatedAlias0
from
Institucion as generatedAlias0
left join
generatedAlias0.sector as generatedAlias1
where
generatedAlias1=:param0
अगर Institucion.sector
वैकल्पिक नहीं है, इसे मॉडल में भी अनिवार्य करें:
@ManyToOne(fetch=FetchType.LAZY, optional = false)
@JoinColumn(name="`sectorId`", nullable = false)
private Sector sector;
अगर Institucion.sector
वास्तव में वैकल्पिक है, केवल एक मैन्युअल क्वेरी जैसे कि @MaciejKowalski के उत्तर में दिखाई गई क्वेरी काम करेगी।
निम्न क्वेरी भी काम करेगी:
List<Institucion> findAllBySectorSectorId(Long id);
यह मानता है कि मॉडल विशेषता नाम बिल्कुल पोस्ट में दिखाए गए हैं।