Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';此查询的正确HQL语法是什么?_Hql - Fatal编程技术网

什么';此查询的正确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;
    }
}