JPA "IN" Query

หลายครั้งที่ผมใช้ 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();

เหมือนจะเคยจดไปแล้วแต่หาไม่เจอ จดไว้อีกทีกันลืม เผื่อเพื่อนถามด้วย

About llun

Just a programmer

,