Liferay 自定义查询转换问题

Liferay custom query cast issue

我将 Liferay 服务构建器与自定义查询一起使用,该查询使用跨两个 table 的内部联接。

我还有一个空白服务,它定义了 return 的模型。

AuditExportFinderImpl.java

public List<AuditExport> getAuditExport(String auditIds) {

        SQLQuery q = buildQuery(auditIds);
        List<AuditExport> audits = (List<AuditExport>)q.list();

        return audits;
    }

    private SQLQuery buildQuery(String auditIds) {

        Session session = null;
        SQLQuery q = null;

        try {

            session = openSession();
            String sql = CustomSQLUtil.get(FIND_EXPORT_AUDITS);
            sql = StringUtil.replace(sql, "[$AUDIT_IDS$]", auditIds);
            q = session.createSQLQuery(sql);
            q.setCacheable(false);
            q.addEntity("AuditExport", AuditExportImpl.class);


        } finally {
            closeSession(session);
        }

        return q;
    }

default.xml(自定义查询):

<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>

这 return 是结果集列表(正确转换为 AuditExport)但是连接的数据 AuditDetail table 对于每条记录都是相同的,见下文:

当不使用投射服务时 returns 正确的数据,见下文(一些数据为了隐私而被屏蔽):

为什么要复制数据以及如何正确转换结果集?

如果需要我可以提供更多信息,谢谢。

好的,所以我的问题出在 service.xml.

在我投射的模型中(在 service.xml 中定义)也只有 AuditId 定义为主键,但我正在检索包含许多主键的数据集。

为了解决这个问题,我在 service.xml 中定义了 AudiIdAudiDetailKey 的复合键,然后正确地转换了数据集。