假設我有三個實體:Customer,Product和Order。每個訂單都有一個與客戶的ManyToOne關聯和一個與產品的ManyToOne關聯。關聯從訂單到客戶和產品分別是單向的。所以數據庫看起來像:JPA NamedQuery獲取引用對象而不執行連接
Customer
+----+-----+
| ID | ... |
+----+-----+
Product
+----+-----+
| ID | ... |
+----+-----+
Order
+----+-------------+------------+-----+
| ID | CUSTOMER_ID | PRODUCT_ID | ... |
+----+-------------+------------+-----+
現在我想寫一個NamedQuery來檢索訂購特定產品的所有客戶。我可以在查詢中引用Customer對象而不執行Customer和Order之間的連接嗎?我可以寫些類似於:
@NamedQuery(
name = "GetCustomersByProduct",
query = "SELECT o.customer"
"FROM Order o "+
"WHERE o.productId = :productId"
)
或者是否需要執行連接?什麼是最好的方法來做到這一點?
我不僅可以用'選擇o.customer',但我也可以使用WHERE o.product =:product'。確實,使用'o.productId'給了我一個像'無法識別的字段'的錯誤。我不得不說我的實體比例子要複雜一點。更確切地說,我使用嵌入在實體中的組合ID(和'Serializable'實體)。我不知道這是否與找到的解決方案有一些關係。 – user1781028