【发布时间】:2014-06-21 03:30:39
【问题描述】:
不确定如何命名这个问题,但会尝试解释。我正在尝试使用 JPA 标准 API,但遇到了一些问题;
我有以下实体;
public class Sword extends Item {}
public class InventoryItem<T extends Item> {}
这就是我正在尝试的工作(除非它返回 List<InventoryItem> 但我希望它返回 List<InventoryItem<Sword>>,否则它不会编译):
public List<InventoryItem<Sword>> get() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<InventoryItem> cq = cb.createQuery(InventoryItem.class);
Root<InventoryItem> o = cq.from(InventoryItem.class);
.........
List<InventoryItem> resultList = query.getResultList();
return resultList;
}
我尝试了以下方法;
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<InventoryItem<Sword>> cq = cb.createQuery(InventoryItem<Sword>.class);
Root<InventoryItem<Sword>> o = cq.from(InventoryItem<Sword>.class);
但出现以下错误;
InventoryItem 无法解析为变量。
Sword 无法解析为变量。
【问题讨论】:
-
我很确定您可以输入确切的类型,而不是占位符。
class Test<OtherType> { }。我现在不在电脑上,所以测试一下并告诉我 -
我确实很早就尝试过了,但子类不是一个真正的实体,因此当它尝试执行查询时,使用 CriteriaBuilder 在运行时会失败。
-
你所说的“不是一个真实的实体”是什么意思?
-
InventoryItem 是一个映射到表“Inventory_Item”的实体,因此该表包含所有玩家-物品关系。如果我扩展它以使类 SwordInventoryItem 扩展 InventoryItem
,休眠将失败,因为它不是实体。把它变成一个实体是没有用的,它会制作多个库存表。
标签: java generics jpa type-conversion