1

例如,我有 2 个表:table1 = book,table2 = site --> 1 book 可以有 n 个站点。

<entity name="book" dataSource="myDs" pk="id"
        transformer="TemplateTransformer"
        query="SELECT b.id, b.title, s.id, s.number, s.content
                     FROM book b. site s WHERE b.id = s.book">
        <field column="b.id" name="id" />
        <field column="s.id" name="sId" />
        <field column="id" template="${id}_${sId}" ignoreMissingVariables="true" />
    </entity>

为什么这不起作用?结果,我只得到了 1 个站点的 1 本书,而不是 x 个站点的 x 本书,我只是没有在字段“id”中获得复合键。

4

3 回答 3

2

我最近遇到了类似的问题,以下几点为我解决了这个问题:

  1. 在 SQL 查询中使用别名来获取不同的列名。请重新检查别名的语法,因为它可能因您的数据库而异。
  2. 当您使用模板转换器或进行子选择(在内部实体上)时,请始终使用 entity.COLUMN_NAME_IN_CAPITAL。大写专栏真的难倒我,直到我偶然发现 solr 论坛,其他人建议将其作为解决方案(不幸的是,我没有提供这个有用花絮的帖子的 URL)。

我在上面针对 Oracle DB 做的。不是 100% 确定它是否适用于其他数据库,但想分享解决方案。

这是尝试通过上述更改重新定义您的 DIH

<entity name="book" dataSource="myDs" pk="id"
    transformer="TemplateTransformer"
    query="SELECT b.id, b.title, s.id as sid, s.number, s.content
                 FROM book b. site s WHERE b.id = s.book">
    <field column="sid" name="sid" />
    <field column="id" template="${book.ID}_${book.SID}"/>
</entity>
于 2012-10-23T15:51:44.777 回答
0

是的,我删除了索引并插入了新的索引。

我得到了什么:

   <doc>
    <str name="id">1</str>
    <str name="title">Im a title</str>
    <str name="number">1337</str>
   <str name="content">content 23</str>
  </doc>

我想要的是:

   <doc>
    <str name="id">1_1</str>
    <str name="title">Im a title</str>
    <str name="number">1337</str>
   <str name="content">content 23</str>
  </doc>

   <doc>
    <str name="id">1_2</str>
    <str name="title">Im a title for 2</str>
    <str name="number">1654654</str>
   <str name="content">ekddsd</str>
  </doc>

我已经尝试更改以下内容

<field column="id" template="${id}_${sId}" ignoreMissingVariables="true" />

进入

<field column="id" template="${id}_${someOtherField}" ignoreMissingVariables="true" />

结果没有改变..看起来 TemplateTransformer 不起作用?

编辑 在我的日志中发现了一些东西:

Unable to resolve variable: id while parsing expression: ${id}_${sId}
Unable to resolve variable: sId while parsing expression: ${id}_${sId}
于 2012-10-12T09:11:25.117 回答
0

multivalued=true添加到 schema.xml 文件中的 id 和 sId 字段。

于 2012-10-12T09:00:45.850 回答