PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

स्प्रिंग डेटा जेपीए अनावश्यक बाएं शामिल हों

@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);

यह मानता है कि मॉडल विशेषता नाम बिल्कुल पोस्ट में दिखाए गए हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्प्रिंग स्टैंडर्डपासवर्डएनकोड का उपयोग कैसे करें और नमक उत्पन्न करें?

  2. अगले अनुक्रम संख्या के साथ एक ग्रेल बनाई गई फ़ाइल में एक सम्मिलित कैसे सेट करें?

  3. PhpPgAdmin के साथ PostgreSQL डेटाबेस निर्यात करना

  4. पोस्टग्रेज 9.2 . में ROWID समकक्ष

  5. स्ट्रिंग कॉलम पर पोस्टग्रेस्क्ल इंडेक्स