我面临一个非常奇怪的问题。这是我的情况。我的文档由2个实体组成,每个实体来自不同的数据库。以下是我的bd-data-config.xml的一部分(出于安全目的已对某些代码进行了修改/剥离)
<document>
<entity name="process_oracle" datasource="oracle" query="
select 'oracle-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="oracle" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_oracle.process_id}">
<field column="subject" name="subject"/>
</entity>
</entity>
<entity name="process_postgresql" datasource="postgresql" query="
select 'postgresql-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="postgresql" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_postgresql.process_id}">
<field column="subject" name="subject"/>
</entity>
</entity>
</document>
当我执行导入时,它将正常运行。尽管在Web Admin界面或日志中都未报告错误,但这是很奇怪的事情。虽然索引了process_postgresql的主题,但未索引process_oracle的主题。这里是输出查询的一小部分。
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"_":"1583958908786"}},
"response":{"numFound":7,"start":0,"docs":[
{
"process_id":"oracle-1"
},
...
{
"process_id":"postgresql-12",
"subject":["subject1", "subject2"]
}
}
}
如您所见,来自PostgreSQL的主题被索引,而来自oracle的主题未被索引。当我检查日志(以调试模式运行)时,我注意到了:
2020-03-13 11:52:47.085调试(Thread-33)[] o.a.s.h.d.JdbcDataSource执行SQL:从tb_subject子对象,tb_process_subject prc_sub中选择不同的sub.subject,其中sub.id_subject = prc_sub.id_subject和prc_sub.id_process =...2020-03-13 11:52:47.953调试(Thread-33)[] o.a.s.h.d.JdbcDataSource执行SQL:从tb_subject子对象,tb_process_subject prc_sub中选择不同的sub.subject,其中sub.id_subject = prc_sub.id_subject和prc_sub.id_process = 12
如您所见,问题在于未设置变量$ {process_oracle.process_id},而变量$ {process_postgresql.process_id}运行得很好。
有人知道为什么会这样吗?
最佳问候
几天后,我可以解决问题。该变量必须为大写。因此它必须看起来像这样:
<document>
<entity name="process_oracle" datasource="oracle" query="
select 'oracle-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="oracle" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_oracle.PROCESS_ID}">
<field column="subject" name="subject"/>
</entity>
</entity>
<entity name="process_postgresql" datasource="postgresql" query="
select 'postgresql-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="postgresql" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_postgresql.PROCESS_ID}">
<field column="subject" name="subject"/>
</entity>
</entity>
</document>
就是这样。就这么简单。