如果您不想在您的Customer
類中隱式設置@OneToMany
關係,則您不必這樣做。您可以在沒有標記關係的情況下執行JPQL查詢(以非常精確的方式)。
假設你有:
@Entity
public class Customer {
// all Customer-related fields WITHOUT @OneToMany relationship with Order
}
@Entity
public class Order {
@ManyToOne
private Customer owner;
}
然後,如果你想獲得的所有Orders
特定Customer
可以執行一個簡單的JPQL查詢這樣的:
// Customer customer = ...
// EntityManager em = ...
String jpql = "SELECT o FROM Order o WHERE o.owner = :customer";
TypedQuery<Order> query = em.createQuery(jpql, Order.class);
query.setParameter("customer", customer);
List<Order> orders = query.getResultList();
通過這種方式,你可以執行只有在您確定要取得Customer's
訂單時纔會提供代碼。
我希望我已經正確理解你的問題。
日Thnx,漂亮的答案,但我希望OneToMany有一個限制註釋用於默認提取,您怎麼看?因爲例如我希望我的Customer實體擁有可以通過「customer.orders」訪問的前10個訂單,但是現在,如果我把OnetoMany有可能加載所有1000000條記錄 – Nav
因此,您需要一個註釋/配置,以允許您說出要獲取多少「太多」結果?我猜這樣的功能可能是**高度**供應商特定的,因爲JPA規範甚至不要求提供者尊重延遲加載。我會在你的情況下仔細地放置JOIN。 –
在上面的例子中,是否有可能運行查詢,例如根據基於訂單表的條件從客戶表中檢索數據?例如,我可以說給我所有訂單> 50英鎊的顧客嗎? – ziggy