【问题标题】:Hiberante 3.0 inner join for two different entity with forigen key具有外键的两个不同实体的 Hibernate 3.0 内部连接
【发布时间】:2012-06-09 13:19:11
【问题描述】:

我是新手。请帮帮我。

我的列表控制器如下所示: @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 表中的 posSalesId 和 POSSalesItem 中的其他列。为此,我编写了这个连接查询,但它显示了一些错误。

我想在 posSalesId 列上进行内部连接,但出现以下错误:

org.springframework.orm.hibernate3.HibernateQueryException:意外令牌:在第 1 行附近,第 111 列 [选择 POSSales.posSalesId ,POSSalesItem.itemName 来自 com.jewellery.entity.POSSales 内部连接 ​​POSSalesItem 上的 POSSales.posSalesId=POSSalesItem。 posSalesId];嵌套异常是 org.hibernate.hql.ast.QuerySyntaxException:意外令牌:在第 1 行附近,第 111 列 [选择 POSSales.posSalesId ,POSSalesItem.itemName from com.jewellery.entity.POSSales 内部连接 ​​POSSalesItem 上的 POSSales.posSalesId=POSSalesItem。 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)

【问题讨论】:

  • 如果您需要帮助,您应该将实际的休眠代码添加到您的帖子中,您似乎只发布了您生成的 SQL
  • 您的问题无法阅读。花一些时间来正确格式化它。
  • @RasmusFranke 你能帮我吗...我也发布了控制器和休眠部分。

标签: hibernate


【解决方案1】:

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

正确的语法是(不需要select

from POSSales s inner join s.POSSalesItemList

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

【讨论】:

  • 兄弟,我有两个实体名称,分别是 POSSales 和 POSSalesItem。在 POSSales posSalesId 是主键,而 posSalesId 是外键 POSSalesItem。现在我想选择 POSSales 实体一或两个值并将它们列出在表单视图。如果你想看看我的外键关系,请告诉你。
猜你喜欢
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多