เกณฑ์ JPA2 - เลือกองค์ประกอบที่มีคอลเลกชันที่มีองค์ประกอบอื่นที่มีค่าที่ระบุ

มีสองคลาส A และ B โดยคลาส A มีคอลเลกชันของวัตถุคลาส B อยู่ในนั้น คลาส B มีฟิลด์ X ฉันต้องการที่จะส่งคืนรายการออบเจ็กต์ของคลาส A ที่มีออบเจ็กต์ประเภท B ในคอลเลกชันซึ่งมีค่าเฉพาะของคุณสมบัติ X เป็นไปได้ไหม

จนถึงตอนนี้ฉันได้ลองบางอย่างเช่น:

Root<A> root = criteriaQuery.from(A.class);
criteriaQuery.select(root);
criteriaQuery.where(root.get("bCollection").get("x").in("value"))

แต่แน่นอนว่ามันไม่ได้ผล จะจัดการเรื่องนี้อย่างไร? คลาส B ถูกแมปเป็นองค์ประกอบแบบซ้อนดังนี้:

<set name="bCollection" table="bCollection">
            <key column="a_id" />
            <composite-element
                class="example.B">
                <many-to-one name="x" column="b_id" not-null="false"
                    cascade="none" foreign-key="b_fk" />
            </composite-element>
</set>

ฉันหวังว่าจะมีคนรู้... ขอบคุณ!


person user2902211    schedule 08.01.2014    source แหล่งที่มา


คำตอบ (1)


แน่นอนว่าเป็นไปได้:

  1. สร้างรูท A (เหมือนที่คุณทำ)
  2. เข้าร่วมรูท A กับ B จะได้ Join B
  3. เพิ่มเงื่อนไข Where โดยใช้ Join B ที่ได้รับ

สำหรับตัวอย่างคำสั่ง IN ให้ google หรือตรวจสอบคำตอบนี้ .

person Andrei I    schedule 08.01.2014
comment
ตกลง :)! แต่จะทำเช่นเดียวกันได้อย่างไรถ้าคอลเลกชันของวัตถุประเภท B นั้นไม่ได้อยู่ใน A โดยตรง แต่ในคลาส C บางตัวภายในคลาส A คลาส C นี้ถูกแมปเป็นส่วนประกอบดังนั้นจึงไม่บวกเข้ากับลำดับชั้นอะไรเลย... - person user2902211; 09.01.2014