2013-07-26 81 views
-1

我是hibernate的新手,所以我非常肯定你们中的一些人会被这个问题所逗乐。它一直让我疯狂。这是一个hibernate查询问题。休眠查询两个表格

我有两个表,假设一个是出口,一个是传单

  • 出口 - 出口名称,出口地址,MERCHANTNAME

  • 传单 - flyerId,flyerName,MERCHANTNAME

所以传单属于商人和商人有很多网点等,

使用Hibernate,得到一个简单的查询,希望从使用MERCHANTNAME出口表中获取不同的网点,我使用的代码:

public List<Outlet> getDealOutlet(@PathParam("merchant") String merchant) { 

some code here.... 

outletsList = session.createQuery("from Outlet as outlet where outlet.merchantName =  :merchant").setString("merchant", merchant).list(); 

some code here 

} 

这工作。

我的问题是如何返回特定flyerId的网点列表。

任何帮助表示赞赏感谢

回答

1

问题:“如何返回与par相关联的商家的商店列表特洛伊传单?“

如果是这样,你是否有一个表格商家映射到一个类商家?这是走下坡路。 Hibernate可以很容易地让你跨连接查询,但是如果Hibernate不知道连接,因为你得到的只是一个叫做merchantName的魔术字符串,你知道两个表中的情况恰好相同,那么Hibernate不能帮助你出去。

(当然,你可以运行两个查询,但我怀疑这就是你要找的内容。)

+0

您需要声明一个Merchant类(使用Java),然后将其映射(在.hbm文件中)到包含商家的表中。然后Outlet和Flyer(使用Java)都会引用他们的Merchant(商家商家,而不是你现在的String商人名称),并且你会使映射(在.hbm中)将他们链接在一起。 您应该阅读Hibernate文档的所有这两部分:https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-manytoone和https ://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/collections.html。 – Tim

+0

此外,[Java持久与休眠](http://www.manning.com/bauer2/)是一本很好的书,涵盖了使Hibernate正常工作的所有复杂细节。如果你打算掌握Hibernate,那就是要阅读的书。 – Tim

0

这取决于你的映射,如果有Merchant实体,并且两个其他实体有关联,它可以写成:

select o 
    from Outlet o 
    join o.merchant m 
    join m.flyers f 
where f.id = :flyersId 

其他明智的,你可以做一些像你在SQL中做的事情:

select o 
    from Outlet o, Flyers f 
where o.merchant = f.merchant and f.id = :flyersId 
+0

喜阿米尔和Tim,感谢您的建议,但是,我在这里做需要多一点帮助。 我确实有一个Merchant表,但是当你说两个实体之间的关联,并且如Tim提到的那样,映射到一个类Merchant时,你可以举一个例子,它是在java类还是在hbm映射中。 一个例子会有帮助。干杯 –

+0

那么,你应该去冬眠的文档!否则,你将不会学到任何东西。 –