Hibernate 3.0内部连接用于具有外键的两个不同实体

时间:2012-06-05 13:59:32

标签: hibernate

我是新手。请帮帮我。

我的列表控制器如下所示: @RequestMapping(value="/possalesList.htm",method=RequestMethod.GET) public String PosSalesList(@ModelAttribute("possales")PSales sales,@RequestParam(value = "salesItemID", required = false)Integer salesItemID,ModelMap model) { List<POSSalesItem> posSalesItemList = posSalesDao.listSalesItem(); model.addAttribute("possalesList", posSalesItemList);
return "possalesList"; }

我的hibernateDaoimpl看起来像这样: @SuppressWarnings("unchecked") @Transactional(readOnly=true) public List<POSSalesItem> listSalesItem() { return (List<POSSalesItem>)getHibernateTemplate().find("select POSSales.posSalesId , POSSalesItem.itemName from POSSales inner join POSSalesItem on POSSales.posSalesId=POSSalesItem.posSalesId"); }

我的内部联接看起来像这样: select POSSales.posSalesId , POSSalesItem.itemName from POSSales inner join POSSalesItem on POSSales.posSalesId=POSSalesItem.posSalesId

在mysql中成功创建了外键。

我正在做的是我从POSSales表和POSSalesItem的其他列中列出posSalesId。为此目的我写了这个连接查询,但它显示了一些错误。

我想在posSalesId列上进行内连接,但是我得到了这些错误:

org.springframework.orm.hibernate3.HibernateQueryException:意外令牌:在第1行第111列[在POSSales.posSalesId = POSSalesItem上从com.jewellery.entity.POSSales内部联接POSSalesItem中选择POSSales.posSalesId,POSSalesItem.itemName。 posSalesId];嵌套异常是org.hibernate.hql.ast.QuerySyntaxException:意外令牌:在第1行第111列[从POSSales.posSalesId = POSSalesItem上的com.jewellery.entity.POSSales内部连接POSSalesItem中选择POSSales.posSalesId,POSSalesItem.itemName。 posSalesId]     org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:660)     org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)     org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)     org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)

1 个答案:

答案 0 :(得分:0)

您的HQL语法inner join POSSalesItem on POSSales.posSalesId=POSSalesItem.posSalesId格式不正确。

正确的语法是(不需要select

from POSSales s inner join s.POSSalesItemList

您必须在映射(或注释)中实现的连接条件,其中您告诉POSSalesItemList的成员是哪个类以及键列(连接列)是什么。为此,请查看hibernate文档one-to-many association with annotations