我有一个扩展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
方式是什么?
答案 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[]>
,这将需要转换,并且如果你想知道如何做到这一点,请告诉我。