我正在尝试做一些我认为简单的事情,但使用 Big Table 和 JPA 并没有按预期工作,我正在使用 datanucleus jpa v2。
@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"
在这里,我通过首先获取对象然后尝试使用该对象作为参数进行查询来尝试查询,但除非对象被“嵌入”,否则这同样不起作用
我首选的解决方案是第一个查询操作,但我很确定这是不可能使用大表的。我仍然很困惑为什么第二个操作不起作用。
任何帮助,将不胜感激。