หลายครั้งที่ผมใช้ 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();
เหมือนจะเคยจดไปแล้วแต่หาไม่เจอ จดไว้อีกทีกันลืม เผื่อเพื่อนถามด้วย