Java Liferay自定义查询强制转换问题
我将Liferay service builder与一个自定义查询一起使用,该查询跨两个表使用内部联接 我还有一个空白服务,它定义了将返回的模型 AuditExportFinderImpl.java default.xml自定义查询:Java Liferay自定义查询强制转换问题,java,sql,hibernate,casting,liferay,Java,Sql,Hibernate,Casting,Liferay,我将Liferay service builder与一个自定义查询一起使用,该查询跨两个表使用内部联接 我还有一个空白服务,它定义了将返回的模型 AuditExportFinderImpl.java default.xml自定义查询: <custom-sql> <sql id="findExportAudits"> <![CDATA[ SELECT audititem.auditid, audi
<custom-sql>
<sql id="findExportAudits">
<![CDATA[
SELECT
audititem.auditid,
audititem.orgid,
audititem.userid,
audititem.username,
audititem.firstname,
audititem.lastname,
audititem.createdate,
audititem.auditaction,
auditdetail.auditdetailkey,
auditdetail.auditdetailvalue
FROM audititem
INNER JOIN auditdetail ON audititem.auditid = auditdetail.auditid
WHERE audititem.auditid IN ([$AUDIT_IDS$])
]]>
</sql>
</custom-sql>
这将正确地将结果集列表转换返回到AuditExport,但每个记录的关联数据AuditDetail表都是相同的,请参见以下内容:
当不使用强制转换时,服务返回正确的数据,请参见下面一些为隐私而屏蔽的数据:
它为什么要复制数据?如何正确转换结果集
如果需要,我可以提供更多信息,谢谢。好的,所以我的问题在my service.xml中
在模型中,我在service.xml中定义了太多的内容,只将audit定义为主键,但我正在检索一个包含其中许多内容的数据集
为了解决这个问题,我在service.xml中定义了AudiId和AudiDetailKey的组合键,然后正确地强制转换数据集。请注意,service.xml可以在服务接口中找到,是开发Liferay服务的关键组件。
<custom-sql>
<sql id="findExportAudits">
<![CDATA[
SELECT
audititem.auditid,
audititem.orgid,
audititem.userid,
audititem.username,
audititem.firstname,
audititem.lastname,
audititem.createdate,
audititem.auditaction,
auditdetail.auditdetailkey,
auditdetail.auditdetailvalue
FROM audititem
INNER JOIN auditdetail ON audititem.auditid = auditdetail.auditid
WHERE audititem.auditid IN ([$AUDIT_IDS$])
]]>
</sql>
</custom-sql>