查詢我試圖做一些簡單不過我想它不工作與使用大表和JPA預期的,我使用JPA DataNucleus將V2。GAE/JPA /數據存儲如何在無主的名單
@Entity
public class Inventory extends DatastoreObject {
...
/**
* List of all inventory items in this object.
*/
@OneToMany(mappedBy = "inventory", fetch = FetchType.LAZY, cascade={CascadeType.ALL})
private List<InventoryItem> inventoryItems = new ArrayList<InventoryItem>();
...
}
@Entity
public class InventoryItem extends DatastoreObject {
...
@ManyToOne
private Inventory inventory;
...
}
當我查看數據存儲查看器時,我看到具有相關關係列的實體。這是庫存表,其中包含庫存物料的ID列表。
Inventory Table
Key Write Ops ID/Name inventoryItems
agxzbWFydGJhcnNpdGVyDwsSCUludmVudG9yeRgwDA 8 48 [InventoryItem(69)]
Inventory Item Table
Key Write Ops ID/Name inventory_id
agxzbWFydGJhcnNpdGVyEwsSDUludmVudG9yeUl0ZW0YRQw 14 69 Inventory(48)
我的問題是我如何獲取所有庫存物品的,他們的inventory_id例如是48,我知道我可以獲取的清單對象,做一個陣列子表,但這似乎真的效率低下。
當我嘗試執行查詢時,它無法按預期工作,並且我瞭解一些原因,因爲連接不受支持,但似乎它能工作,如果我可以訪問庫存項目表的inventory_id列但看來我不能。
當我嘗試簡單的查詢,這將無法正常工作。
"Select from InventoryItem.class.getName() item where item.inventory.id = :inventoryId"
我希望這將在DataNucleus將工作,我明白,這是典型的加入,但如果DataNucleus將知道這是一個無主的關係,該清單對象是由它映射的id不能這項工作不知何故?我知道.id屬性沒有任何意義,因爲它是一個任意的標記,但它似乎應該有一種方法來執行這種類型的查詢與無主@OneToMany(mappedBy =「inventory」)配置。
我試過的其他方式也由分配對象作爲參數,但令我驚訝這也不能工作。
"Select from InventoryItem.class.getName() item where item.inventory = :inventory"
在這裏,我先取出對象,然後嘗試使用該對象作爲參數傳遞給查詢,但再次,除非對象是「嵌入式」
我首選的方案是這樣不起作用嘗試查詢第一個查詢操作,但我很確定這是不可能使用大表。儘管爲什麼第二個操作不起作用,我仍然感到困惑。
任何幫助,將不勝感激。
同意使用在某些情況下一個重點,但隨後即不論持久性API的,並且是完全適用與JDO(或JPA),所以沒有理由去改變API –
那麼我建議Objectify只是爲了使查詢更有效率而不用擔心事務,因爲在這種情況下他需要更新多個實體。在JDO/JPA的情況下,我們需要在更新單個實體時創建事務,而且我經常遇到一種情況,一種實體更新,另一種不與JDO/JPA一起使用。 –
我已經在不同的項目上使用了幾次物化,並且爲了便攜性的目的繼續回到jpa/jdo。我沒有在gae上銷售,並且希望能夠輕鬆遷移到另一個提供商,而不需要使用對象化進行重大模型/測試重寫。儘管如此,我確實發現了客觀化的方便和功能。 –