หลายครั้งที่ผมใช้ Collection เป็น field ใน Persistent object ของ JPA แต่ก่อนที่รู้จัก JPA ใหม่ ๆ เวลาจะ query อะไรก็มักจะสร้าง reference กลับไปยัง object หลักทุกครั้งเพื่อให้อ้างอิงกลับได้ พึ่งมารู้ไม่นานว่ามี Keyword IN เพื่อใช้สำหรับตรวจหา parent ที่ object อยู่ใน collection ของมัน
* Code ทั้งหมดจะอิงตาม Play Framework
@Entity public class Basket extends Model { @OneToMany Set<Fruit> fruits = new HashSet<Fruit>(); } @Entity public class Fruit extends Model { @OneToOne Basket basket; String name; public Fruit(String name, Basket basket) { this.basket = basket; this.name = name; } } public class Main { public static void main(String... args) { Basket basket1 = new Basket(); basket1.save(); Basket basket2 = new Basket(); basket2.save(); Fruit grape = new Fruit("Grape", basket1); Fruit orange = new Fruit("Orange", basket2); Fruit durian = new Fruit("Durian", basket1); } }
จากโค้ดด้านบนถ้าต้องการหาว่า องุ่นอยู่ในตะกร้าไหนสามารถหาได้โดยใช้ IN ช่วยคือ
Fruit grape = Fruit.find("name = ?", "Grape").first(); Basket basket = Basket.find("from basket b where ? in b.fruits", grape).first();
เหมือนจะเคยจดไปแล้วแต่หาไม่เจอ จดไว้อีกทีกันลืม เผื่อเพื่อนถามด้วย