2014-05-07 11 views
17

के साथ हाइबरनेट मानदंड मुझे किसी समस्या का समाधान नहीं मिल रहा है जो आसान लगता है।मौजूदा खंड

class A { 
    Set<B> bs; 
} 

class B { 
    String text; 
} 

कैसे एक मापदंड क्वेरी है कि सभी एक के कम से कम एक बी इकाई जो किसी दिए हालत (b.text = 'शर्त' की तरह) को पूरा शामिल रिटर्न बनाने के लिए: 2 इकाई श्रेणियां हैं कहो?

उत्तर

26

मुझे लगता है कि इस लिंक उपयोगी हो सकता है:

"क्या तुम सच में ऐसा करने की कोशिश कर रहे हैं सभी पिज्जा आदेश जहां प्राप्त करने के लिए है: http://mikedesjardins.net/2008/09/22/hibernate-criteria-subqueries-exists/

यह कैसे बना n मापदंड मौजूद है के बारे में निम्न उदाहरण में शामिल है । एक संबद्ध छोटे पिज्जा मौजूद दूसरे शब्दों में, SQL क्वेरी है कि आप का अनुकरण करने की कोशिश कर रहे हैं

SELECT * 
    FROM PIZZA_ORDER 
WHERE EXISTS (SELECT 1 
       FROM PIZZA 
       WHERE PIZZA.pizza_size_id = 1 
        AND PIZZA.pizza_order_id = PIZZA_ORDER.pizza_order_id) 

तरीका है कि आपको लगता है कि एक "मौजूद है" Subquery उपयोग करते हुए, इस तरह से है है:

Criteria criteria = Criteria.forClass(PizzaOrder.class,"pizzaOrder"); 
DetachedCriteria sizeCriteria = DetachedCriteria.forClass(Pizza.class,"pizza"); 
sizeCriteria.add("pizza_size_id",1); 
sizeCriteria.add(Property.forName("pizza.pizza_order_id").eqProperty("pizzaOrder.pizza_order_id")); 
criteria.add(Subqueries.exists(sizeCriteria.setProjection(Projections.property("pizza.id")))); 
List<pizzaOrder> ordersWithOneSmallPizza = criteria.list(); 

और वॉयला, परिणाम में दो पिज़्ज़ाऑर्डर्स होंगे! "

+9

क्या आप अपनी पोस्ट को प्रासंगिक बिट्स को शामिल करने के लिए संपादित कर सकते हैं ताकि लिंक डाउन होने पर अभी भी मूल्य हो? – mabi