这个查询的HQL语法是什么?

时间:2011-03-16 19:15:34

标签: hql

我有一个扩展GameDefinition的课程ItemDefinition。 我还有其他扩展ItemDefinition的类。 我有另一个类StoreItem,其类型itemDefinition属于ItemDefinition

我想找到加入GameDefinitions的所有StoreItems。但是,当然,我不希望获得扩展ItemDefinition的其他定义。

在原始sql中,我希望这样的东西可以工作。

select * from game_definition g
inner join store_item s on g.id=s.item_definition_id

适当的HQL方式是什么?

1 个答案:

答案 0 :(得分:1)

这与HQL的关系不如在实体bean中配置映射。假设GameDefinition@Entity,就像这样:

SELECT g FROM GameDefinition g

使用适当的注释,您可以使用某种映射(一对一,一对多等)配置实际的StoreItems。例如,如果映射是one-to-one

GameDefinition.java

@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;
    }
}

StoreItem.java

@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;
    }
}

编辑 您实际上可以使用HQL执行此操作,但之后Query#getResultList()将返回List<Object[]>,这将需要转换,并且如果你想知道如何做到这一点,请告诉我。