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

स्प्रिंग जेपीए संयुक्त टेबल पर विनिर्देशों और मानदंड का उपयोग कर

आप अपना Specification लपेट सकते हैं सहायक वर्ग में परिभाषाएँ:

public class DelegationSpecificationsHelper {

    public static Specification<Domain> notificationContactSpec(String contact) {
        return (root, query, cb) -> cb.equal(root.join("notification").get("contact"), contact);
    }

    public static Specification<Domain> idSpec(SearchCriteria searchCriteria) {
        switch (criteria.getOperation()) {
          case ":":
            if (root.get(criteria.getKey()).getJavaType() == String.class) {
              return builder.like(
                      root.<String>get(criteria.getKey()),
                      "%" + criteria.getValue() + "%");
            } else {
              return builder.equal(root.get(criteria.getKey()),
                      criteria.getValue());
            }
          case "=":
            return builder.equal(root.get(criteria.getKey()),
                    criteria.getValue());
          default:
            return null;
        }
    }
}

और फिर आप इसे इस तरह इस्तेमाल कर सकते हैं:

Specifications<Domain> specifications = Specifications.where(DelegationSpecificationsHelper.idSpec(new SearchCriteria("id", "=", domainId))
                                                      .and(DelegationSpecificationsHelper.notificationContactSpec("someSearchString"));

स्थिर आयात और कुछ रिफैक्टरिंग के बाद:

SearchCriteria idCriteria = new SearchCriteria("id", "=", domainId)
Specifications<Domain> specifications = 
                 Specifications.where(idSpec(idCriteria)
                               .and(notificationContactSpec("someSearchString"));

बेशक आपको यहां से हार्डकोडेड मानों से छुटकारा पाना चाहिए:cb.equal(root.join("notification").get("contact"), contact); और इसके बजाय कुछ डीटीओ ऑब्जेक्ट या जेनरेट किए गए जेपीए मेटा मॉडल का उपयोग करें।

मेटामॉडल जोड़ने के बाद यह इस तरह दिख सकता है:

 public static Specification<Domain> notificationContactSpec(String contactValue) {
        return (root, query, cb) -> cb.equal(root.join(Domain_.notification).get(Notification_.contact), contactValue);
 }

मेटामॉडल पीढ़ी के बारे में अधिक जानकारी:https://docs। jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html




  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. पीएचपी पीडीओ foreach और लाने के साथ

  3. MySQL में अनुक्रमणिका आकार

  4. पहचान बनाम गैर-पहचान वाले रिश्ते (फिर से !!!)

  5. पायथन में MySQL डायनेमिक क्वेरी स्टेटमेंट