Hibernate 具有传递依赖关系的ORM查询

Hibernate 具有传递依赖关系的ORM查询,hibernate,database-design,orm,coldfusion,hql,Hibernate,Database Design,Orm,Coldfusion,Hql,以下是我的数据库架构的一部分: 因此,我使用表格页面、点和项来生成页面的布局。每个项目还绑定了一个itemData。所有“我的表”模型都已创建并定义了它们之间的关系。我可以通过循环以下查询的结果来生成页面: <cfset variables.page = EntityLoad("Page", {id=arguments.id}, true)> 现在,当我尝试做同样的事情时,问题来了,但是只加载来自单个“idee”的itemsData,这在法语中是一个想法。我想不出用entit

以下是我的数据库架构的一部分:

因此,我使用表格页面、点和项来生成页面的布局。每个项目还绑定了一个itemData。所有“我的表”模型都已创建并定义了它们之间的关系。我可以通过循环以下查询的结果来生成页面:

<cfset variables.page = EntityLoad("Page", {id=arguments.id}, true)>

现在,当我尝试做同样的事情时,问题来了,但是只加载来自单个“idee”的itemsData,这在法语中是一个想法。我想不出用entityLoad实现这一点的方法,所以我尝试使用HQL:

<cfset variables.page = ORMExecuteQuery("
    select  p
        from Page p
        left join p.points po
        left join po.items it           
        left join it.itemsData id
        where p.id = :pid and id.idIdee = :iid", {pid=arguments.id, iid=session.user.idee}, true)>

看起来很接近,但事实并非如此。。。我有时会得到超过一排等


任何ORM专家都知道我如何处理这个问题?

当使用NH进行查询时,总是会得到完整的对象。这意味着,您无法通过查询过滤itemsData的想法(您只需按想法查找itemsData,但这些itemsData始终是完整的,并且附带了所有想法)

在新罕布什尔州,你可以使用过滤器来实现这一点

支持从idee到itemsData的链接要容易得多。然后您只需加载Idee(您有它的id),然后将ItemsData附加到它

class Idee
{
  IList<ItemsData> ItemsData { get; private set; }
}
类Idee
{
IList ItemsData{get;private set;}
}

您只需要将其映射为反向包。

好的,我得到了它,我没有先加载页面,而是先加载一个Idee,然后再转到我的页面。谢谢。事实上,这并不能完全解决我的问题,因为它可能只是没有为Idee定义itemsData,这将使您无法访问页面。@Ownatik:如果您没有找到其他页面,您仍然可以加载该页面。问题是我定义了一对一关系,而不是项与项数据之间的多对一关系。