什么';此查询的正确HQL语法是什么?
我有一个类什么';此查询的正确HQL语法是什么?,hql,Hql,我有一个类GameDefinition,它扩展了ItemDefinition。 我还有其他扩展ItemDefinition的类。 我有另一个类StoreItem,它的属性名为itemDefinition,类型为itemDefinition 我想找到所有加入其商店项目的游戏定义。但当然,我不想得到扩展ItemDefinition的其他定义 在原始sql中,我希望类似的东西能够工作 select * from game_definition g inner join store_item s on
GameDefinition
,它扩展了ItemDefinition
。
我还有其他扩展ItemDefinition
的类。
我有另一个类StoreItem
,它的属性名为itemDefinition
,类型为itemDefinition
我想找到所有加入其商店项目的游戏定义
。但当然,我不想得到扩展ItemDefinition
的其他定义
在原始sql中,我希望类似的东西能够工作
select * from game_definition g
inner join store_item s on g.id=s.item_definition_id
什么是合适的HQL
方法?与其说是HQL,不如说是在实体bean中配置映射。假设GameDefinition
是一个@实体
,如下所示:
SELECT g FROM GameDefinition g
您可以使用适当的注释,通过某种映射(一对一、一对多等)配置实际的StoreItems
。例如,如果映射为:
GameDefinition.java
StoreItem.java
编辑:您实际上可以使用HQL执行此操作,但随后将返回一个列表,该列表将需要强制转换、外观难看等。如果您想了解如何执行此操作,请告诉我。但我的存储项没有直接指向子类。它指向超级类。还有许多其他类型的对象是存储项的。超级类是一个@实体?
@Entity
@Table(name="game_definition")
public class GameDefinition implements Serializable
{
// snip other fields...
private StoreItem storeItem;
// snip other getters/setters...
@Fetch(FetchMode.JOIN)
@OneToOne(fetch = FetchType.EAGER, mappedBy = "gameDefinition")
public StoreItem getStoreItem()
{
return storeItem;
}
public void setStoreItem(StoreItem storeItem)
{
this.storeItem = storeItem;
}
}
@Entity
@Table(name="store_item")
public class StoreItemimplements Serializable
{
// snip other fields...
private GameDefinition gameDefinition;
// snip other getters/setters...
@Fetch(FetchMode.JOIN)
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "item_definition_id")
public GameDefinition getGameDefinition()
{
return gameDefinition;
}
public void setGameDefinition(GameDefinition gameDefinition)
{
this.storeItem = gameDefinition;
}
}