例如我有2个表:table1 = book,table2 = site - > 1本书可以有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'中没有得到复合键。
答案 0 :(得分:2)
我最近遇到了类似的问题,以下几点为我解决了这个问题:
我正在针对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>
答案 1 :(得分:0)
将 multivalued = true 添加到schema.xml文件中的id和sId字段。
答案 2 :(得分: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}